Rog*_*mbe 5 c++ winapi command-line
我正在编写一个包含另一个进程的(Win32控制台)程序; 它需要参数,如下例所示:
runas.exe user notepad foo.txt
Run Code Online (Sandbox Code Playgroud)
那就是:runas
解析user
然后运行记事本,传递剩余的参数.
我的问题是,它argv
被分解为单个参数,但CreateProcessAsUser
需要一个lpszCommandLine
参数.
构建此命令行可能并不像只argv
与空格一起重新连接一样简单.有什么指针吗?
这只是一个例子.我的第一个参数实际上不是用户名,并且可能包含空格.这使得手动解析GetCommandLine
棘手的结果.
类似地,一个天真的连接argv
将不起作用,因为它需要处理引用原始参数并且可能在其中包含空格的情况.
手动重组它们很难:
您可以尝试重新组合它们,我认为它会起作用,但请确保遵循相同的命令行转义窗口所具有的规则.这可能不仅仅是您正在寻找的简单解决方案.
此外,如果有任何参数中包含空格,那么您可能希望将它们连接到带有引号的字符串.下面是一个奇怪的转义规则的例子:如果你有--folderpath,"c:\test\"
那么最后一个反斜杠必须加倍--folderpath "c:\test\\"
.
如果您使用的是MFC:
您可以从派生的CWinApp的theApp.m_lpCmdLine中获取所需的值.请注意,您仍然可以使用__argc和__argv或CommandLineToArgvW以其他方式访问它们.
如果您仅使用Win32(即使没有GUI):
你可以从WinMain获得它.这可能是您的计划的切入点.
请注意,您仍然可以使用__argc和__argv或CommandLineToArgvW以其他方式访问它们.
如果必须使用带有main或wmain的基于控制台的应用程序:
Win32 API GetCommandLine似乎是要走的路.你需要仍然解析它以通过.exe名称.考虑exe名称/路径周围的引号.如果开头没有这样的报价,那么只需前往下一个空格即可.
归档时间: |
|
查看次数: |
1304 次 |
最近记录: |