Determine command line parameters from invoked Desktop session

brenlex used Ask the Experts™
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?
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Top Expert 2014

what is in the CmdLine and the Paramstr(0) variables?
how about;

How did you start your program ?  
Paramstr(i)  and Paramcount should do it for you
CompTIA Network+

Prepare for the CompTIA Network+ exam by learning how to troubleshoot, configure, and manage both wired and wireless networks.

sample code goed like that

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



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.  
ServiceShell.Start("C:\\temp\\notepad.exe", "C:\\temp\\mycfgfile.txt", "C:\\temp")
... works OK.  Notepad opens up showing the contents of mycfgfile.txt.
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 ?


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 zone you also commented on.

thank you

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial