管理者/昇格した権限で実行している場合でも、サービスを開始しようとすると「アクセスが拒否されました」

管理者/昇格した権限で実行している場合でも、サービスを開始しようとすると「アクセスが拒否されました」

sc start "MyService"管理者権限で「管理者: コマンド プロンプト」を使用していますが、次のエラーが発生します。

[SC] StartService が失敗しました 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) は、継承フラグ "ContainerInherit,ObjectInherit" と PropagationFlag "InheritOnly" の組み合わせにより、ルールが適用されているファイル/フォルダとその子を "NT AUTHORITY\LOCAL SERVICE" の IdentityReference が読み取り、実行 (および同期、その副作用) できるようにします。"Allow" は、ルールを許可するように設定します (拒否が適用されると、それが上書きされますが、これが発生する可能性は低いです)。

ここで、このアクセスルールをTorをインストールしたフォルダに適用します。最初のステップでは、既存のACLを取得します(最初にそこにあったものを台無しにしないようにするため)。ACL を取得2番目のステップでは、変数に格納したオブジェクトにアクセスルールを追加するだけです。3番目のステップでは、変更したアクセス制御リストをコマンドに入力します。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

この追加の回答から少なくとも 1 人か 2 人が何らかの恩恵を受けてくれることを願っています。そうでなくても、1 年か 2 年後にここに戻ってきて、最初にこれをどうやってやったか忘れてしまったときに自分でそれを使うことになるでしょう...

関連情報