C# (.NET 4.5) で記述された Windows サービスがあります。このサービスにはuser
、タイマー変数を保持するために使用されるスコープ設定があります。サービスをデバッグするには、この変数を更新する必要がuser.config
あるため、サービスのファイルがどこにあるかを知る必要があります。OnStart()
したがって、サービスのメソッドに次のコードを追加しました。
Logger.InfoFormat("user.config at \"{0}\"", ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath);
ログファイルにダンプされるのは、次のパスです。
C:\Windows\system32\config\systemprofile\AppData\Local\company\service.exe_Url_randomcharacters\1.0.0.0\user.config
しかし、そのファイルを開こうとすると、存在しません。Windows検索を行った後、実際のファイルは次の場所にありました。
C:\Windows\SysWOW64\config\systemprofile\AppData\Local\company\service.exe_Url_randomcharacters\1.0.0.0\user.config
どうしてこれなの?32 ビット/64 ビットの互換性マジックを想定していますが、実際のパスを取得するための正しいコード (ある場合) は何でしょうか?
役立つ場合の追加情報: サービスは Windows Server 2008 R2 64 ビット マシンで実行されており、installutil
. の 32 ビット バージョンと 64 ビット バージョンのどちらinstallutil
が使用されたかはわかりませんが、違いはありますか?