3

我想出了这个代码。它将正确执行并返回 true。但它不会改变 Path 变量的值。当我在 cmd 中这样输入 --> setx Path "C:\Program Files\Java\jdk1.7.0_02\bin\" 时,它可以工作并更改路径值

这是代码

// Prepare shellExecutInfo
SHELLEXECUTEINFO ShRun = {0};
ShRun.cbSize = sizeof(SHELLEXECUTEINFO);
ShRun.fMask = SEE_MASK_NOCLOSEPROCESS;
ShRun.hwnd = NULL;
ShRun.lpVerb =NULL;
ShRun.lpFile = "C:\\Windows\\System32\\setx.exe";
ShRun.lpParameters = "Path \"\"\"C:\\Program Files\\Java\\jdk1.7.0_02\\bin\\\"\"\"";
ShRun.lpDirectory =NULL;
ShRun.nShow = SW_SHOWNORMAL;
ShRun.hInstApp = NULL;

// Execute the file with the parameters
if(ShellExecuteEx(&ShRun))
    printf("done");
else
    printf("no");

这里会有什么问题?

4

1 回答 1

1

您对论点的引用是错误的。你的引号太多了。你需要写

ShRun.lpParameters = "Path \"C:\\Program Files\\Java\\jdk1.7.0_02\\bin\\\"";

为了看到您的版本会失败,我在控制台上做了以下实验:

C:\Users\heff>setx 路径 """C:\Program Files\Java\jdk1.7.0_02\bin\"""
错误:无效的语法。默认选项不允许超过“2”次。
键入“SETX /?” 供使用。

我还注意到您正在使用SEE_MASK_NOCLOSEPROCESS. 通常你这样做是为了等待返回的进程句柄。你似乎没有这样做。更重要的是,您似乎没有关闭进程句柄,这是您在使用SEE_MASK_NOCLOSEPROCESS.

于 2013-04-01T09:50:00.993 回答