ShellExecuteEx运行中的lpParameters

lpParameters in ShellExecuteEx runas

本文关键字:lpParameters 运行 ShellExecuteEx      更新时间:2023-10-16

我正在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:RepositoriesQt' is not recognized as an internal or external command, operable program or batch file.

脚本的路径是

J:RepositoriesQt Projectdebugtest.bat

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

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

再试一次:

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