1

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

这是我的 ShellExecute 代码。我已将其简化为传入 1 个参数,但这仍然会中断。

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);

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

@echo off
pause

我得到的shell输出是。

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

脚本的路径是

J:\Repositories\Qt Project\debug\test.bat

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

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

4

1 回答 1

0

接下来试试:

ShExecInfo.lpFile = NULL;
ShExecInfo.lpParameters = L"test.bat \"test param\"";
于 2015-09-17T14:57:47.910 回答