0

Windows XP および Windows 32 ビット システムでユーザーのホーム ディレクトリをプログラムで渡すと、プロセス メソッドが機能しません。

以下のコードは正常に動作します。

 QProcess process;
 process.execute("C:/DOCUME~1/pjo/myprok/tmp/APP.exe");

動作しないコード:

ここでは、QDir::homePath を使用して APP.exe のパスを取得しています。

    process.execute("C:/Documents and Settings/pjo/myprok/tmp/APP.exe");

errorString は「不明なエラー」を返します

私は決して動作しない開始方法でも試しました:

B 動作しないコード:

    process.start("C:/Documents and Settings/pjo/myprok/tmp/APP.exe");

エラー: パスが見つかりません

    process.start("C:/DOCUME~1/pjo/myprok/tmp/APP.exe");

エラー : 不明なエラー

4

2 に答える 2

2

execute()は静的関数であるため、次のように呼び出す必要があります。

QProcess::execute("C:/Documents and Settings/pjo/myprok/tmp/APP.exe");

あなたはプログラムでホームディレクトリを取得すると言っていますが、あなたが示すコードはそれをしません。たぶんあなたはこのようなパスを作成しています:

QProcess::execute(QDir::homePath() + "APP.exe");

次に、パスは次のように/ディレクトリとファイル名の間を見逃します。

"C:/Documents and Settings/pjo/myprok/tmpAPP.exe"
于 2012-05-02T05:16:02.557 に答える
1

あなたの問題は、パス (C:\Documents and Settings...) 内のスペースによって引き起こされる引用の問題が原因である可能性があります。start() には 2 つのオーバーロードがあることに注意してください。

void    start ( const QString & program, OpenMode mode = ReadWrite )
void    start ( const QString & program, const QStringList & arguments, OpenMode mode = ReadWrite )

最初のものを使用しています。これは、実行可能パスとすべての引数を 1 つの文字列に取り、正しく引用されることを期待しています。引用符を付けないと、「c:\documents」は実行可能ファイルとして解釈され、「and」「Settings...」などは引数として解釈されます。

2 番目のバージョンは、引数を個別に取り、引用符を必要とせずに実行可能パスを正しく解釈します。したがって、最も簡単な方法は、

process.start("C:/Documents and Settings/pjo/myprok/tmp/APP.exe", QStringList());

これにより、2 番目のバージョンが使用されることが保証され、引用に関するすべての問題を回避できます。常にそのオーバーロードを使用することをお勧めします。

前述のとおり、静的メソッドである execute() にも同じことが当てはまるため、QProcess オブジェクトのエラー コードは設定されません。

于 2012-05-02T15:18:09.053 に答える