我想出了这段代码。它将正确执行并返回true。但它不会改变Path变量的值。当我这样输入时 - > setx路径“C:\ Program Files \ Java \ jdk1.7.0_02 \ bin \” 在cmd中,它可以工作并更改Path值
这是代码
// 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");
这里会出现什么问题?
答案 0 :(得分:1)
您对参数的引用是错误的。你的报价太多了。你需要写
ShRun.lpParameters = "Path \"C:\\Program Files\\Java\\jdk1.7.0_02\\bin\\\"";
要查看您的版本是否会失败,我在控制台上进行了以下实验:
C:\Users\heff>setx path """C:\Program Files\Java\jdk1.7.0_02\bin\""" ERROR: Invalid syntax. Default option is not allowed more than '2' time(s). Type "SETX /?" for usage.
我还注意到您使用的是SEE_MASK_NOCLOSEPROCESS
。通常,您可以这样做,以便您可以等待返回的进程句柄。你似乎没有这样做。更重要的是,当您使用SEE_MASK_NOCLOSEPROCESS
时,您似乎没有关闭过程句柄。