gpt4 book ai didi

c++ - ShellExecuteEx runas 中的 lpParameters

转载 作者:太空宇宙 更新时间:2023-11-04 13:28:04 27 4
gpt4 key购买 nike

我正在用 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 命令在参数中包含引号吗?

最佳答案

下一步试试:

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

关于c++ - ShellExecuteEx runas 中的 lpParameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32631883/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com