• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 465
  • Last Modified:

Determine command line parameters from invoked Desktop session

I am attempting to launch a Delphi Winform executable (with a command line argument) from a WinService, in an environment which does not support Interactive Services (i.e. Win7/XP SP3).  Please see my original post (Q_26873780) for reference.

I am using a C# variation of an excellent (ServiceShell) code snippet found in
Q_26726314 to launch executables with command line arguments.

Unfortuntely the Delphi 'ParamCount' method always returns 0 when I use the aforementioned C# version of the ServiceShell call, whereas when calling other programs (such as notepad.exe) with a command line argument everything works perfectly.

Can anyone suggest an alternative to using ParamCount to determine my arguments? Or indeed any other method which might be at my disposal?
0
brenlex
Asked:
brenlex
  • 3
  • 2
  • 2
  • +1
1 Solution
 
aikimarkCommented:
what is in the CmdLine and the Paramstr(0) variables?
0
 
systanCommented:
how about;
GetCommandLine
0
 
BdLmCommented:
How did you start your program ?  
Paramstr(i)  and Paramcount should do it for you
0
Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

 
BdLmCommented:
sample code goed like that

 for i:= 0 to paramcount do
      begin
      /// eg. KEYWORD : debug
       if LowerCase(ParamStr(i)) = 'debug' then



     end;
0
 
brenlexAuthor Commented:
My Delphi program is a long standing tried and tested applicaton -- when started from the windows command line with arguments it starts OK (i.e. paramcount is > 0), however when I use the code snippet from Q_26726314 my paramcount is 0.  As mentioned, I am using the aforementioned code snippet to launch my application because it is being launched from a service which needs to interact with the desktop (for background see original question (Q_26873780).

The strange thing is that it is only a Delphi program which has the problem.  
i.e.
ServiceShell.Start("C:\\temp\\notepad.exe", "C:\\temp\\mycfgfile.txt", "C:\\temp")
... works OK.  Notepad opens up showing the contents of mycfgfile.txt.
However,
ServiceShell.Start("C:\\temp\\mydelphiapp.exe", "C:\\temp\\mycfgfile.txt", "C:\\temp")
... launches mydelphiapp.exe but paramcount returns 0.  As mentioned, if I just use "C:\temp\mydelphiapp.exe C:\temp\mycfgfile.txt" from command line manually, paramcount is > 0.

0
 
BdLmCommented:


I think you need to call PChar(MyPath) .... can you trie it ?
0
 
brenlexAuthor Commented:
Strange one -- I thought ParamCount implicitly called GetCommandLine, though it appeared not to work.  When I myself call GetCommandLineW explicitly, I see my argument OK.

I'll give the points here to systan for the original recommendation to use GetCommandLine directly.
BdLm - thanks for making me think along the lines of PChar -- I shall give you the points in the parallel question in the VB.net zone you also commented on.
0
 
systanCommented:
thank you
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

  • 3
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now