2012-05-01 4 views
0

処理方法は、私はWindows XPとWindows 32ビットシステムでプログラムQProcessがwin32システムで動作していませんか?

をユーザのホームディレクトリを渡す場合は、以下のコードは正常に動作し機能していません。ここで

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は "UnKnow n個のエラーは、」

は私が働くことはありませんまた、startメソッドを試してみました:

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

エラー:不明なエラー

:パス

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

エラーが見つかりません

Bは、コードを動作していません

答えて

1

あなたの問題は、おそらく内のスペースによって引き起こさによる引用の問題ですパス(C:\ Documents and Settings ...)。

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

あなたが実行可能ファイルのパスと1つの文字列内のすべての引数を取り、それは正確に引用されることを想定していた、最初に使用している2つの開始のためのオーバーロード()があること は注意。引用符を付けないと、 "c:\ documents"は実行可能ファイル、 "and" "Settings ..."などが引数として解釈されます。

第2のバージョンは引数を別々に取ります。引用符を必要とせずに、実行可能パスを正しく解釈します。このように、最も簡単な方法は、これに使用される第2のバージョンを確認し、すべての引用の問題からあなたを保存する必要があり

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

を使用することです。 私は常にその過負荷を使用することをお勧めします。

既に説明したように、静的メソッドであるexecute()にも同じことが適用されるため、QProcessオブジェクトのエラーコードは設定されません。

+0

ああ、あなたはドキュメントを読んだ最初の人でした:) –

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" 
+0

ありがとう@roku、あなたは正しいです。 –

関連する問題