3

私はこのコードを思いつきます。正しく実行され、true が返されます。ただし、パス変数の値は変更されません。このように入力すると --> cmd で setx Path "C:\Program Files\Java\jdk1.7.0_02\bin\" と入力すると、動作して 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");

ここで何が問題になりますか??

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 に答える