Link to home
Create AccountLog in
Avatar of brenlex
brenlexFlag for United Kingdom of Great Britain and Northern Ireland

asked on

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?
Avatar of aikimark
aikimark
Flag of United States of America image

what is in the CmdLine and the Paramstr(0) variables?
ASKER CERTIFIED SOLUTION
Avatar of systan
systan
Flag of Philippines image

Link to home
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
See answer
How did you start your program ?  
Paramstr(i)  and Paramcount should do it for you
sample code goed like that

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



     end;
Avatar of brenlex

ASKER

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.



I think you need to call PChar(MyPath) .... can you trie it ?
Avatar of brenlex

ASKER

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.
thank you