3

我无法在我的 Windows 服务中创建文件,这是错误

错误在 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\.
幸运的是,不是每个人都可以访问该文件夹。

有两种方法;将您的文件写入您有权访问的另一个文件夹,或以管理员权限运行您的服务。

我会推荐第一个选项。

于 2012-08-28T14:42:40.673 回答
0

最简单的解决方案是去你要保存文件的文件夹,右键单击,属性,安全,添加一个新用户 IIS_Users 并授予写入权限。

于 2013-04-22T13:48:36.207 回答
0

在 ProjectInstaller 上使用 LocalSystem 帐户

于 2019-03-19T08:13:49.633 回答