3

Windows 7 で CSharp Windows サービスを実行しています。デバイス管理用のフレームワークから dll をインスタンス化します。この dll には、'pm.config' と呼ばれる app.config に保存されているいくつかの設定があります。

すべてのアセンブリと pm.config ファイルを、winsvc プロジェクト フォルダーと同じレベルにある「bin」というフォルダーにコピーしました。

dll フレームワークへの参照を追加し、プロジェクトをコンパイルしました。pm.config ファイルは、「bin\debug」および「bin\release」サブフォルダーにあります。installutil を使用して winsvc をインストールし、winsvc を開始しました。winsvc がフレームワーク dll から 'Initialize' メソッドを呼び出すと、このメソッドは pm.config ファイルを開こうとし、次の例外を生成することを除いて、すべてうまくいきました。

InnerException = {"The machine.config file 'pm.config' was not found.\r\nParameter name: machineConfigFilename"}

を使用してアセンブリの場所を調べたAssembly.GetExecutingAssembly().Location ところ、winsvc プロジェクトの正しいフォルダー (「mysvcproject\bin\debug」フォルダー) を指しています。

これは winsvc のセキュリティ コンテキストに関連するものだと確信していますが、わかりません。Winsvc を開始するために LocalService アカウントを使用していますが、「bin\debug」にはこのアカウントに対する権限がありません。代わりに、このフォルダーの全員のアカウントを完全に制御できるようにしましたが、それでもエラーが発生しました。

私は完全に道に迷っています。誰か助けてくれませんか?

前もって感謝します

4

4 に答える 4

3

少し前に Windows サービスを展開するときに、同様の問題が発生しました。問題は、Windows サービスがファイルが c:\windows\system32 にあると想定していたことです。Assembly.GetExecutingAssembly().Location を使用して検査する代わりに、Directory.GetCurrentDirectory() を試して、同じ結果が得られるかどうかを確認してください。そうでない場合は、pm.config ファイルを現在のディレクトリに配置してみてください。

于 2012-09-28T21:56:15.317 に答える
1

App.config ファイル名は、「.config」を付加した Windows サービス実行可能ファイルと一致する必要があります。したがって、サービスが「pm.exe」の場合、構成ファイルは「pm.exe.config」である必要があります。

于 2012-09-28T21:49:45.040 に答える
0

実行中のアプリケーションは、参照された dll のものではなく、独自の app.config を使用します。実行中のアセンブリに app.config を作成し、そこに設定を配置する必要があります。

dll の App.config

于 2012-09-28T22:20:25.287 に答える