2017-07-05 12 views
0

私は混乱した問題に直面しています。私のアプリケーションには別のアプリケーション(B.exe)を起動できますフォルダ、A.exeとB.exeは同じフォルダにあるので、ここではB.exeの相対パスは "B.exe"です。私のアプリが別のアプリケーションから起動されたときに相対パスが変更されました

しかし、別のアプリケーション(C.exe)がA.exeを実行でき、C.exeが別のフォルダにあるため、A.exeがC.exeから起動されても実行できない場合はここで問題が発生しますC.exeは、エラーが出るので、C.exeを見つけることができないと言います。

したがって、相対パスが現在のC.exeフォルダに変更されていると思います。C.exeフォルダにはB.exeがありません。

友だちはこの問題を解決しましたか?または、この問題を解決するために、どのようにして別の州の正しい相対的な道を得ることができますか?私は私のc.exeを実行するためにShExecInfoを使用

は、いくつかのコードは以下の通りです:

QStringList paramList; 
paramList.push_back("requiresAdmin"); 
QString paramsAsOneString = paramList.join(' '); 
LPCWSTR szParams = reinterpret_cast<LPCWSTR>(paramsAsOneString.utf16()); 
LPCWSTR szAppName = reinterpret_cast<LPCWSTR>(appName.utf16()); 

SHELLEXECUTEINFO ShExecInfo = { 0 }; 
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO); 
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS; 
ShExecInfo.hwnd = NULL; 
ShExecInfo.lpVerb = L"runas"; 
ShExecInfo.lpFile = szAppName; 
ShExecInfo.lpParameters = szParams; 
ShExecInfo.lpDirectory = NULL; 
ShExecInfo.nShow = SW_SHOW; 
ShExecInfo.hInstApp = NULL; 
+0

( 'GetModuleFileNameW'を使用して)' A.exe'のフルパスを取得し、最後に 'A.exe'を' B.exe'で置き換えるべきです。 – VTT

+0

クール、私は完全なパスを使用して、それを解決する、ありがとう男! – AdvancingEnemy

答えて

2

あなたが他のアプリからアプリを起動した場合、あなたはあまりにもフォルダを設定する必要があります。つまり、CがPATH_Cにあり、CがPATH_AにあるアプリケーションAを起動すると、プロセスAはPATH_Cで実行されるため、プロセスBを実行しようとするとアクセスできない。

たとえば、フォルダも設定する必要があります。そう、オウムガイは、指定したフォルダに開かれている場合

user:~Documents/$: nautilus /home/user/ 

:あなたがUbuntuのでオウムガイを実行すると、フォルダあまりにもセットアップする必要があります。そうでない場合は、起動するプロセスのフォルダ(この場合はDocumentsフォルダ)にnautilusが開きます。

問題を回避するには、B.exeがA.exeと同じフォルダにある場合は、実行可能ファイルの相対パスを使用して、GetModuleFileName関数を使用してB.exeを起動します。

+0

私にとっては非常に便利ですが、QCoreApplication :: applicationDirPath()を使用して絶対パスを取得することができます。ありがとう、私の友人。 – AdvancingEnemy

関連する問題