brenlex
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?
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?
what is in the CmdLine and the Paramstr(0) variables?
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
How did you start your program ?
Paramstr(i) and Paramcount should do it for you
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;
for i:= 0 to paramcount do
begin
/// eg. KEYWORD : debug
if LowerCase(ParamStr(i)) = 'debug' then
end;
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:\\te mp\\notepa d.exe", "C:\\temp\\mycfgfile.txt", "C:\\temp")
... works OK. Notepad opens up showing the contents of mycfgfile.txt.
However,
ServiceShell.Start("C:\\te mp\\mydelp hiapp.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.
The strange thing is that it is only a Delphi program which has the problem.
i.e.
ServiceShell.Start("C:\\te
... works OK. Notepad opens up showing the contents of mycfgfile.txt.
However,
ServiceShell.Start("C:\\te
... 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 ?
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.
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