InstallUtil.exeを使用してインストールすると、Windowsサービスの作業ディレクトリとしてC:\ winnt(または同様のもの)が取得されると確信しています。サービスが最初にインストールされたディレクトリにアクセスする、または(インストール時に)キャプチャする方法はありますか?現時点では、それをapp.exe.configファイルに手動で入力していますが、それはひどく手動であり、ハックのように感じます。
実行時またはインストール時に、サービスがどこからインストールされたかを判別するためのプログラム的な方法はありますか?
リフレクションを使用して、実行中のアセンブリの場所を取得できます。リフレクションを使用して、作業ディレクトリを実行中のアセンブリの場所に設定する簡単なルーチンを次に示します。
String path = System.Reflection.Assembly.GetExecutingAssembly().Location;
path = System.IO.Path.GetDirectoryName(path);
Directory.SetCurrentDirectory(path);
アセンブリを含むディレクトリが必要ですか?もしそうなら、それは簡単です:使用 Assembly.Location
。
私はプロセスの作業ディレクトリを変更しようとはしませんが-それが厄介な副作用を持っていても驚かないでしょう、本当にあなたが再それを行うことを許可されました。
Directory.SetCurrentDirectory
メソッドを知りませんでした。通常私はします:
Environment.CurrentDirectory = System.AppDomain.CurrentDomain.BaseDirectory;
非常に遅いですが、それは誰かを助けるかもしれません。 AppDomain.CurrentDomain.BaseDirectoryを使用してこの問題を解決しました
string someFilePath = AppDomain.CurrentDomain.BaseDirectory + @"\Resources\SomeResource.xml";
AppDomain.CurrentDomain.BaseDirectoryは、C:\ Windows\system32 \パスではなく、Windowsサービスが実際にインストールされたディレクトリを提供しました。
@Ramonがすでに同じ解決策を投稿しているのを後で見ました。
_InstallUtil.exe
_は、インストール時にアプリケーションのServiceInstaller.Install()
を呼び出します。
それを上書きし、プロジェクトのInstallers
のリストに追加して、必要な情報を取得します。