1

私の実行可能ファイルはこの場所にあります-> D:\Examples\C_Pro\newApp.exe また、その「C_Pro」フォルダーにはいくつかのファイルが含まれています ( file1.txt、file2.txt、file44.exe、newApp.c )

私のnewApp.cファイルには、このように同じフォルダにある「file44.exe」ファイルを実行するShellExecute関数が含まれています-> ShellExecute(NULL,"open","D:\Examples\C_Pro\file44.exe",NULL ,NULL,1)

このようにして、すべてが正常に動作します..

私はVBのAppPathのようなものについて話している

しかし、別の PC でこの newApp.exe を実行したい場合は、""D:\Examples\C_Pro\" を、別の PC の "newApp.exe" ファイルを含むパスに置き換えたい (C のように) :\ソフトウェア\ )

GetModuleFileName 関数を使用してパスを取得しますが、新しいディレクトリの PathRemoveFileSpec 関数が機能しない時点でのみ必要な newApp.exe 部分が含まれています。

また、GetModuleFileName のリターン パスも --> D:\Examples\C_Pro\newApp.exe のようになりますが、ShellEcxecute に何らかのパスを入力すると、このように二重の shalse (スペース シーケンス) が必要になります --> D:\Examples\C_Pro\

どうすればこの問題を解決できますか。

実際のコード スニペットはこれです...

int main()
{
    ShellExecute(NULL,"open","D:\\Softwares\\TypingMaster700.exe",NULL,NULL,SW_SHOWNORMAL);
}

しかし、私はこのようにしたいです。(これはダミー関数です。ここでの「some_Funtion」は説明用のダミー関数を意味します。

int main()
{
    char *dirPath = some_Function(a,x,d);
    char *fullPath;
    fullPath = strcat(dirPath,"\\TypingMaster700.exe");
    ShellExecute(NULL,"open",fullPath,NULL,NULL,SW_SHOWNORMAL);
}
4

2 に答える 2

2

プログラムが実行されるすべてのシステムがそのような概念をサポートしているわけではないため、実行可能ファイルが配置されているディレクトリへの絶対パスを取得することは、C 標準では標準でサポートされていません。それにもかかわらず、実際には、それは望ましい機能です。要するに、良い質問です。

残念ながら、これはそれほど単純ではなく、プログラムがexeclcs を使用して呼び出された場合、不可能になることさえあります。argv[0]paulsm4と同様に、どのアプリケーションを実行して開始するかを決定するには、シェルを再生する必要があります。Linux では、パスが で始まる場合、/argv[0]実行可能ファイルへの絶対パスであり、最後の実行可能ファイル名を削除することでディレクトリを見つけることができます。Windows では\、ドライブ文字を確認する必要がありますが、よくわかりません。残りの部分では Linux を想定していますが、Windows に適用する\ために毎回読んでください。/

argv[0]が上記のように絶対パスでない場合は、含まれているかどうかを確認/する必要がありますgetcwd

argv[0]に何も含まれていない場合は、環境変数を/実行して、を含む最初のディレクトリを見つける必要があります。PATHargv[0]

それがすべて失敗した場合、アプリケーションは、execlまたはその友人の 1 人を介して呼び出され、実行可能ファイルの場所について正直ではありませんでした。あなたは運が悪いです。

于 2013-04-02T23:49:44.920 に答える