我正在使用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命令在参数中包含引号吗?
答案 0 :(得分:0)
尝试下一步:
ShExecInfo.lpFile = NULL;
ShExecInfo.lpParameters = L"test.bat \"test param\"";