Home > Net >  Unable to access UNC path via windows service even when using same user for service
Unable to access UNC path via windows service even when using same user for service

Time:10-26

I have a windows vm and have created an Admin user, let's say - AdminUser. I have mounted an azure file share to that user to Z: drive. The share can be accessed by unc path or the drive path. I also have a c# utility that checks if path exists and it returns true when I run it. This is all good. Now when I created a windows service with that utility and with same user credential, it throws an error that the path doesn't exist. Things to note -

  • The service user or the user I used to login is a local adminstrator user and while creating the service, I had provided as "./AdminUser" to CreateService. Also provided password to config.
  • The VM is also connected to a domain. So I have users from default-domain\* and connected-domain\*. The connected-domain linked to an azure active directory.

Is there any other type of user I need to set as log on to service?

I can see here it says the local user can't access network resources but I am wondering since I mounted the path with proper credentials, does this matter?

Update: Got the same issue when using running as with the exe.

runas /user:USER­NAME “C:\full\path\of\Program.exe”

CodePudding user response:

Though the user account is same, when the windows service runs as a 'user' the logon session that it gets is different than the interactive user session (which has the Z drive). Unless you programmatically load the Azure fileshare as a network drive in your code that is part of the Windows service, you won't be able to access it.

CodePudding user response:

We have to use cmdkey to store the credentials that can be used by SMB later. Launch a cmd.exe with the user that you want to use for the service using either context menu or command e.g.

runas /user:default-domain\domainServiceUser cmd

Then in the new command shell use cmdkey

cmdkey /add:<storagteAccountName>.file.core.windows.net\<shareName> /user:AZURE\<storageAccountName> /pass:<storageAccountKey>

Rerun the service and it should work.

If you want to also mount this as a persistent drive, you can use

Command Prompt

net use z: \\<storagteAccountName>.file.core.windows.net\<shareName> /persistent:yes

Powershell

New-PSDrive -Name Z -PSProvider FileSystem -Root "\\<storagteAccountName>.file.core.windows.net\<shareName>" -Persist

Make sure that the user is exactly the same that would be used for the windows service including the domain i.e. use default-domain\domainServiceUser or ./AdminUser for running the cmdkey.

  • Related