私はボタン付きの小さなQt GUIプログラムを持っています。これは.batファイルを開始します。Qt5:QProcess :: startDetachedで.batファイルを呼び出すと、System32でプログラムが見つかりません
の.batを呼び出すための重要な部分はこれです:
void MainWindow::on_pushButton_clicked()
{
int r = QMessageBox::warning(this, tr("Shutdown System"),
tr("Do you want to close the program and the system?"),
QMessageBox::Yes | QMessageBox::Default,
QMessageBox::No,
QMessageBox::Cancel | QMessageBox::Escape);
if (r == QMessageBox::Yes){
QProcess::startDetached("cmd /C shutdown_all.bat");
}
}
私はC:\Windows\System32\psshutdown.exe
に位置PSShutdownを呼び出すするつもり、と当然のPATH
に。
私はテスト目的のための.batでこれを置く:
cd C:\Windows\System32
psshutdown
PAUSE
を.BATファイルが単独で呼び出されると、それについてのプログラムおよび印刷情報を見つけるように見えるが、私は呼び出すために、ボタンを使用する場合Qtのプログラムでの.bat呼び出す
プログラムは、それが結果のpsshutdown.exe
キャプチャを見つけることができませんダブルクリック(期待される結果)との.batを呼び出す
パスも.BATにecho %PATH%
を追加する場合、両方のバージョンで[OK]を印刷しているようです。どんなアイデアが間違っているのでしょうか?
これは、二つの異なるコンピュータでは、Qtの5.5および5.7、デバッグとリリースモードでテストされています。
私は必要に応じて完全なソースコードを提供することができますが、Qt Creatorのテンプレートを使用してボタンを追加したQtウィジェットアプリケーションに過ぎません。
に、Windowsエクスプローラのような64ビットのファイルマネージャでファイル
psshutdown.exe
をコピーしています。 ** C:\ windows \ system32 \ psshutdown.exe ** – Squashmanこんにちは@Squashman、まだ見つかりません。回避策私は同じフォルダに実行ファイルをコピーしてpsshutdownの呼び出しを呼び出すのがわかりましたが、それはすばやく汚れた解決策です。 –
64ビットシステムで32ビットの実行可能ファイルを実行している場合、[ファイルシステムリダイレクタ](https://msdn.microsoft.com/en-us/library/aa384187.aspx)が犠牲になっている可能性があります。 'psshutdown.exe'を' C:\ WINDOWS \ SysWOW64'にコピーしてみてください。コピーした後にエラーが発生しなければ、そうです。 。 。 – Mike