Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Access to the path is Denied When create file by windows service

i cannot create file in my windows service and this is error

error In onstart method Access to the path 'C:\Windows\system32\BridgeServiceLog.txt' is denied.

  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");

      }
like image 728
Tarek Saied Avatar asked Jan 22 '26 05:01

Tarek Saied


2 Answers

The service user account probably doesn't have access to write to C:\Windows\System32 (which is the working directory of a Windows service).

Anyway, you shouldn't write to that folder. It is for the operating system - not your service.

You can use Environment.GetFolderPath to get a suitable path for writing files like log files in a way that will work any computer, not just your own computer. Here is an example.

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

You should of course use suitable values for MyCompany and MyProduct.

like image 83
Martin Liversage Avatar answered Jan 24 '26 23:01

Martin Liversage


When running a Windows Service the default working folder is <System drive>:\Windows\System32\.
Fortunately, not everyone can just access that folder.

There are two ways about this; write your file to another folder to which you do have rights, or run your service with administrator rights.

I would recommend the first option.

like image 44
Gerald Versluis Avatar answered Jan 24 '26 23:01

Gerald Versluis



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!