次の答えは、C#を使用した解決策を示しています。c++(c ++ \ cliではなく)のみを使用した場合、同等のものはどうなるのでしょうか。
System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
トリックを行う可能性のあるブーストに何かありますか?
この問題に基づいて、私は次のことを行ってきました。ファイルI/Oを使用してwin32サービスを正しく作成して実行する
SetCurrentDirectory
(Win32の場合):
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365530%28v=vs.85%29.aspx
current_path
でboost::filesystem
:
http://www.boost.org/doc/libs/1_51_0/libs/filesystem/doc/reference.html#current_path
BaseDirectoryに相当するものはGetModuleFileName
、(最初の引数にnullハンドルを使用して)、その後GetFullPathName
に実行可能パスからディレクトリを取得することです。
Windowsでは、
System.IO.Directory.SetCurrentDirectory ( System.AppDomain.CurrentDomain.BaseDirectory )`
だろう:
// Get full executable path
char buffer[MAX_PATH];
GetModuleFileName(NULL, buffer, MAX_PATH);
// Get executable directory
boost::filesystem::path path(buffer);
path = path.parent_path();
// Set current path to that directory
boost::filesystem::current_path( path );
C ++は標準のディレクトリの概念を認識しないため、アプリケーションのディレクトリを取得するためのプラットフォームに依存しない方法はないことに注意してください。Boostにも同等の機能はないようです。
SetCurrentDirectoryWINAPIを使用します。
Windowsの_chdirとSetCurrentDirectoryの違いは何ですか?で利用可能なもう1つの答えがあります。
おそらくモジュール名も必要です(コメントからのようです)、これは私の古い店からのものです:-
int main()
{
char path[MAX_PATH]={0};
GetModuleFileName(0,path,MAX_PATH);
}