
我從提升的“管理員:命令提示字元”中使用sc start "MyService"
,但收到以下錯誤:
[SC] 啟動服務失敗 5:
訪問被拒絕。
為了完整起見,當您嘗試從 GUI ( ) 執行它時,錯誤services.msc
是:
錯誤5:訪問被拒絕
由於它是一個 .NET 服務,因此它是使用InstallUtil.exe
(以管理員身份執行)安裝的。該服務配置為作為網路服務運行,但我也嘗試過使用本地服務。
答案1
這是因為預設情況下網路服務或本機服務都沒有權限讀取我的服務執行檔所在的目錄。我需要授予他們對該資料夾的讀取權限(至少)。
答案2
我遇到了這個確切的問題,但很遺憾沒有在答案中找到一套明確的說明來解決它,所以這是我的:
又快又髒
最簡單的解決方案是簡單地確保您要為其安裝服務的應用程式(在我的特定範例中為 Tor)所在的某個位置允許在運行命令之前NT AUTHORITY\LOCAL SERVICE
讀取(例如, )。C:\Tor\
我個人鄙視這樣的解決方案。
更乾淨,更有教育意義,也更乏味
我自己將 Tor 放入$env:UserProfile\AppData\Local\Programs
,因此以下是我使用提升的 PowerShell 終端機在 Windows 10 上所做的操作:
PS C:\Users\User\AppData\Local\Programs>$fsar = New-Object
System.Security.AccessControl.FileSystemAccessRule(`
>> "NT AUTHORITY\LOCAL SERVICE",`
>> "ReadAndExecute",`
>> "ContainerInherit,ObjectInherit",`
>> "InheritOnly",`
>> "Allow")
這創建了一個檔案系統存取規則(我在程式碼中提到的$fsar
)允許「NT AUTHORITY\LOCAL SERVICE」的 IdentityReference 讀取並執行(並同步,其副作用)規則所應用到的任何檔案/資料夾及其子資料夾繼承標誌「ContainerInherit, ObjectInherit」與PropagationFlag「InheritOnly」組合。 「允許」將規則設定為允許(任何應用程式的拒絕都會覆蓋它,但這不太可能出現)。
現在我們想要將此存取規則套用到我們安裝 Tor 的資料夾。取得 Acl。第二步只是將該存取規則加入我們儲存在變數中的物件中。第三步驟將我們修改的存取控制清單輸入到指令中設定Acl我們還提供了包含 Tor 的資料夾的路徑。
PS C:\Users\User\AppData\Local\Programs>$torFolderAcl = Get-Acl .\MyTorFolder
PS C:\Users\User\AppData\Local\Programs>$torFolderAcl.AddAccessRule($fsar)
PS C:\Users\User\AppData\Local\Programs>$torFolderAcl | Set-Acl .\MyTorFolder
您應該能夠導航到tor.exe
文件在資料夾結構中的位置,並在此之後執行命令。
僅限 Tor 的東西
對於那些不知道的人來說,有一個內建的捷徑可以讓您在不sc
直接使用或任何其他服務應用程式的情況下執行此操作。
如果您想將torrc
檔案儲存在特定位置並讓服務使用它,您可以使用它來安裝服務:
PS C:\Users\User\AppData\Local\Programs\MyTorFolder>.\tor.exe --service install -options -f $pathToTorrc
如果您像我一樣,在意識到存在繁瑣的存取控制問題之前期望上述內容能夠正常運作,那麼您可能只想執行以下命令:
PS C:\Users\User\AppData\Local\Programs\MyTorFolder>.\tor.exe --service start
我希望至少有一兩個人能從這個額外的答案中受益。如果沒有,我確信我會在一兩年內回到這裡並親自使用它,當時我不可避免地會忘記我第一次是如何做到這一點的...