1

Windowsサービスを作成しました。Windowsインストーラーを使用してサービスのセットアップを行います。設定ファイルのような1つのXMLファイルがあります。デバッグプロジェクトをアタッチしてWindowsサービスをデバッグするときはいつでも、正常に動作します。しかし、インストール後、C:\ Windows\system32にexample.xmlファイルが見つからなかったというイベントが表示されます。それは繰り返しの問題です。誰かがこれで何が起こっているのか教えてもらえますか?または何か提案はありますか?

4

4 に答える 4

2

ほとんどの場合、ファイルは探している場所ではありません。

VSでのデバッグ中はアプリケーションと同じですが、サービスとして開始する場合/コマンドラインから開始する場合は異なる「現在の作業フォルダー」でコードが検索される可能性があります。

コードがファイルを期待する場所(つまり、アプリケーションの隣)からロードすることを確認しますが、相対パス( "myfile.xml"など)からはロードしないようにします。

于 2013-03-14T19:57:18.113 に答える
2

これはインストーラーの問題ではありません。Windowsサービスは、常にSystem32を現在のディレクトリとして開始されます。サービスを起動する前に、この行をProgram.csのMain()メソッドに追加します。

    Environment.CurrentDirectory = new FileInfo(Assembly.GetExecutingAssembly().FullName).DirectoryName;
于 2013-03-14T20:20:59.630 に答える
1

なぜWindowsフォルダに保存するのですか?そうする本当に正当な理由がない限り、これは悪いことです。アプリが実行されているのと同じ場所に構成をインストールし、次のファイルパスを取得します。

var folderPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var configPath = Path.Combine(folderPath, configFileName);
于 2013-03-14T20:20:35.810 に答える
-1

問題は、サービスが管理者として実行されていないことです。サービスが管理者として実行されていない場合、system32フォルダーの下のファイルを読み取ることはできません。

管理者として実行するようにサービスプロパティを変更します。これで問題は解決するはずです。

于 2013-03-14T19:57:42.283 に答える