3

Windows サービスでファイルを作成できません。これはエラーです

error onstart メソッドでパス「C:\Windows\system32\BridgeServiceLog.txt」へのアクセスが拒否されました。

  protected override void OnStart(string[] args)
      {


            try
            {
                 Logger.InitLogFile("BridgeServiceLog.txt");
                 Trace.WriteLine(Logger.logSwitch.TraceInfo, "Trace Started");
                 Trace.WriteLineIf(Logger.logSwitch.TraceInfo, "OnStart Started");

                 _bridgeServiceEventLog.WriteEntry("new OnStart");
                 if (Vytru.Platform.Bridge.Configuration.LicenseValidetor.ValidCountAndTypeDevices())
                 {
                      SharedData.InitializeBridge();
                      // WsInitializeBridge();
                 }
                 else
                 {

                      this.Stop();
                      _bridgeServiceEventLog.WriteEntry("LicenseValidetor Error");
                 }
                 _bridgeServiceEventLog.WriteEntry("end Start");
            }
            catch (Exception e)
            {
                 Trace.WriteLineIf(Logger.logSwitch.TraceError, e.Message);
                 _bridgeServiceEventLog.WriteEntry("error In onstart method " + e.Message);
            }
            Trace.WriteLineIf(Logger.logSwitch.TraceInfo, "OnStart Ended");

      }
4

4 に答える 4

5

C:\Windows\System32サービス ユーザー アカウントには、(Windows サービスの作業ディレクトリである)への書き込みアクセス権がない可能性があります。

とにかく、そのフォルダーに書き込むべきではありません。これはオペレーティング システム用であり、サービス用ではありません。

Environment.GetFolderPathを使用して、自分のコンピューターだけでなく、どのコンピューターでも機能する方法でログ ファイルなどのファイルを書き込むための適切なパスを取得できます。ここに例があります。

var companyPath = Path.Combine(
  Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData),
  "MyCompany"
);
var productPath = Path.Combine(companyPath, "MyProduct");
var logFilePath = Path.Combine(productPath, "BridgeServiceLog.txt");

もちろん、 と には適切な値を使用する必要がMyCompanyありMyProductます。

于 2012-08-28T14:41:59.987 に答える
5

Windows サービスを実行している場合、デフォルトの作業フォルダは<System drive>:\Windows\System32\.
幸いなことに、誰もがそのフォルダーにアクセスできるわけではありません。

これには 2 つの方法があります。権限のある別のフォルダにファイルを書き込むか、管理者権限でサービスを実行してください。

最初のオプションをお勧めします。

于 2012-08-28T14:42:40.673 に答える
0

最も簡単な解決策は、ファイルを保存するフォルダーに移動し、右クリックしてプロパティ、セキュリティ、新しいユーザー IIS_Users を追加し、書き込み権限を与えることです。

于 2013-04-22T13:48:36.207 に答える
0

ProjectInstaller で LocalSystem アカウントを使用する

于 2019-03-19T08:13:49.633 に答える