ShellExecuteEx runas中的lpParameters

时间:2015-09-17 13:44:01

标签: c++ qt command-line runas shellexecuteex

我正在使用qt中的应用程序,我需要使用ShellExecuteEx来启动应用程序。我正在运行批处理文件,我需要传递2个参数。第一个参数只是一个字母,但第二个参数是一个可能包含或不包含空格的路径。无论我做什么,它都不会逃离空间。似乎包括任何转义引用实际上打破了整个调用。我认为问题在于runas。我不是100%确定它是如何工作的,但似乎它正在复制调用并在升级的shell中运行它。似乎这个过程打破了添加的引用。

这是我的ShellExecute代码。我把它简化为传递1个参数,但这仍然会破坏。

B

这是test.bat只是为了完整性

SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = L"runas";
ShExecInfo.lpFile = L"test.bat";
ShExecInfo.lpParameters = L"\"test param\"";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);

我得到的shell输出是。

@echo off
pause

脚本的路径是

'J:\Repositories\Qt' is not recognized as an internal or external command, operable program or batch file.

您可以看到初始命令失败,因为它弄乱了原始路径。

知道如何使用runas命令在参数中包含引号吗?

1 个答案:

答案 0 :(得分:0)

尝试下一步:

ShExecInfo.lpFile = NULL;
ShExecInfo.lpParameters = L"test.bat \"test param\"";