エラー5:Windowsサービスの開始時にアクセスが拒否されました


97

C#で作成したWindowsサービスを開始しようとすると、このエラーが発生します。

代替テキスト

これまでの私のコード:

private ServiceHost host = null;

public RightAccessHost()
{
    InitializeComponent();
}

protected override void OnStart(string[] args)
{
    host = new ServiceHost(typeof(RightAccessWcf));
    host.Open();
}

protected override void OnStop()
{
    if (host != null)
        host.Close();
    host = null;
}

アップデート#1

アカウントNETWORK SERVICEに権限を付与することで上記の問題を解決しましたが、別の問題が発生しました。

代替テキスト

アップデート#2

サービスを開始できません。System.InvalidOperationException:サービス 'RightAccessManagementWcf.RightAccessWcf'には、アプリケーション(インフラストラクチャでない)エンドポイントがありません。これは、アプリケーションの構成ファイルが見つからなかったか、構成ファイルでサービス名に一致するサービス要素が見つからなかったか、サービス要素でエンドポイントが定義されていなかったことが原因である可能性があります。System.ServiceModel.ServiceHostBase.InitializeRuntime()at System.ServiceModel.ServiceHostBase.OnOpen()でSystem.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description、ServiceHostBase serviceHost)でSystem.ServiceModel.Description.DispatcherBuilder.EnsureThereAreNonMexEndpoints(ServiceDescription description)でTimeSpanタイムアウト)System.ServiceModel.Channels.CommunicationObject。


2
2番目の問題は、そのメッセージだけで解決するのは簡単ではありません。イベントログを調べて、実際のエラーを確認する必要があります。
Matt Ellen、

1
システムアカウントがフォルダにアクセスできるかどうかを確認します。
開発者

回答:


116

私はこの投稿が古いことに気づきましたが、明確な解決策はなく、私がこれをどのように解決したかを投げ入れたかっただけです。

最初のError 5: Access Deniedエラーは、出力ディレクトリへのアクセス許可をNETWORK SERVICEアカウントに。

二番目 Started and then stoppedエラーは、サービスに障害が発生したときの一般的なメッセージのようです。実際のエラーメッセージについては、イベントビューア(特に「Windowsログ>アプリケーション」)を確認してください。

私の場合、それはapp.configの悪いサービス構成設定でした。


7
エクスプローラーを使用してフォルダーに移動し、右クリックして[プロパティ]、[セキュリティ]を選択し、ユーザー名のリストのNETWORK SERVICEアカウントに正しいアクセス許可を割り当てることで、アクセス許可を変更しました。
Justin Skiles

私の場合、「エラー5」については、ネットワークサービスが実行可能ファイルのフォルダへのアクセス権を持っていないことが原因でした。これは開発用なので、Program Programフォルダーにファイルを配置するのではなく、開発マシンからファイルをコピーできる共有フォルダーに配置しました。ネットワークサービスに読み取り/実行/リストの権限を付与することで十分です。
ZZZ 2013年

5
「ローカルサービス」と「ネットワークサービス」をbin \ Debugフォルダーに追加して機能します。ありがとう!
Hernaldo Gonzalez

3
人々への単なるメモ:権限を変更しても問題が解決しない場合は、イベントビューアでエラーを確認してください。サービスの開始を妨げるまったく関係のないSQLエラーがありましたが、それでも「エラー5:アクセスが拒否されました」と表示されました。エラー。
dtryan 2016年

「イベントビューア」に関するメモをありがとう-私と同じ、無関係なエラー「エンドポイントが見つかりません」でしたが、「アクセス拒否(5)」になりすましました
David Votrubec

26

コンピューター->管理->サービス-> [サービス]プロパティ。次に、アカウント情報のタブ。管理者アカウントなどでサービスを実行するなど、これらの設定を試してください。

それは私のためにそれをしました。

編集:問題になる可能性があるのは、ほとんどのサービスがLOCAL SERVICEまたはLOCAL SYSTEMアカウントとして実行されていることです。あなたが実行するとC:/my-admin-dir/service.exe、これらのアカウントではなく、彼らがそのディレクトリに何かを実行するために許可されていない、あなたが取得しますerror 5。したがって、サービスの実行可能ファイルを探し、ディレクトリ->プロパティ->セキュリティを選択し、サービスの実行に使用するアカウントが、ディレクトリを完全に制御できるユーザーのリストにあることを確認します。


21

これでうまくいきました。

  1. サービス実行可能ファイルを含む最上位のフォルダーを右クリックします。プロパティに移動
  2. 「セキュリティ」タブに移動します
  3. 「編集」をクリック
  4. 「追加」をクリック
  5. 「SYSTEM」という名前を入力し、[OK]をクリックします
  6. SYSTEMユーザーを強調表示し、[フルコントロール]の横にある[許可]チェックボックスをクリックします
  7. [OK]を2回クリックします

11
「システム」は私にとってはうまくいきませんでした、私はギャンブルして「サービス」を試してみました-それはトリックをしました。
Exter

4
「サービス」を追加して「フルコントロール」を追加すると、Windows 10で機能しました
Fredrik

(ProjectInstallerの)ServiceProcessInstallerのAccountプロパティがLocalServiceに設定されているので、Local Serviceアカウントに完全なアクセス許可を付与しました。
Dave、

14

また、同じエラーが発生しました。それは、[サービス]> [プロパティ]> [ログオン]> [ローカルシステムアカウント]として右クリックして解決しました。


ありがとう。tor.exe --service startに問題がありましたが、今では魅力的に機能します!
アルマンカリミ2018

私のために働いた。しかし、これをプログラムで指定する方法はありますか?
Sisir

とった。serviceProcessInstaller->プロパティ->アカウントを右クリックし、デフォルトの「ユーザー」ではなく「LocalSystem」に設定します。サービスと出来上がりをインストールします。
Sisir

10

Path to executable実際の実行可能ファイルをポイントしていることを確認してください(サービスを右クリック->プロパティ->一般タブ)。powershell(およびsc.exe)を使用すると、実際の実行可能ファイルを指定せずにサービスをインストールできます。


誤って.exeファイルではなくフォルダを残しました。この問題を解決するには、「sc delete servicenameXYZ」+サーバーを再起動してサービスを完全に削除し、正しいサービスの.exeファイルを再インストールする必要がありました。それからそれは魅力のように始まります。この投稿をありがとう。
Honza P.

あなたは私を救いました!実行可能なフルパスの代わりにフォルダを割り当てています... ...良く見ている必要があります
ILTER

9

私は解決策を得ました:

1. Go to local service window(where all services found)
2. Just right click on your service name: 
3. click on "properties" 
4. go to "log on" tab
5. select "local system account"
6. click "ok"

これでサービスを開始できます。


1
「ローカルシステムアカウント」をすでに選択していますが、それでもメッセージが表示されます。
user2568374

4

私の場合、以下はチェックされませんでした。

ここに画像の説明を入力してください


2
私のような他の読者の場合:このスクリーンショットはサービスプロパティウィンドウの一部です![サービス]ウィンドウを開き(実行:services.msc)、サービスを右クリックすると表示されるコンテキストメニューから[プロパティ]を選択します。
MohaMad

4

私がここから受け入れた答えを誤って読んだため、このエラーが発生しました:実行可能ファイルからWindowsサービスを作成します

sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"

以下のために<path_to_service_executable>、私は例えば、実行可能ファイルのフォルダのパスを使用していましたC:\Folder

これは、実行可能ファイルのパスにする必要がある、例えばC:\Folder\Executable.exe


3

私にとって-サービスを実行するフォルダとその中のファイルは、Windowsの「暗号化」オプションを使用して暗号化されていました。それを削除して-出来上がり!


これは私にとって問題であることがわかりました-私が使用していたサーバーのピエロのシステム管理者は、すべてのディレクトリをデフォルトでNTFS暗号化するためにいくつかのノブをいじっていたため、LocalSystemには実際にそれらを読み取るための暗号化キーがありません...
KJ Tsanaktsidis 2016年

3

このエラーは、OnStartメソッドにエラーがある場合に発生します。OnStartメソッドでホストを直接開くことはできません。呼び出されたときに実際には開かず、代わりにコントロールを待機するためです。したがって、スレッドを使用する必要があります。これは私の例です。

public partial class Service1 : ServiceBase
{
    ServiceHost host;
    Thread hostThread;
    public Service1()
    {
        InitializeComponent();
         hostThread= new Thread(new ThreadStart(StartHosting));

    }

    protected override void OnStart(string[] args)
    {
        hostThread.Start();
    }

    protected void StartHosting()
    {
        host = new ServiceHost(typeof(WCFAuth.Service.AuthService));
        host.Open();
    }

    protected override void OnStop()
    {
        if (host != null)
            host.Close();
    }
}

3

アクセス拒否のエラーコード5を持っている場合、おそらくコード内で、ログファイルへの書き込みのように、サービスがシステム内のいくつかのファイルを操作しようとしています

サービスのプロパティ選択log onタブを開き、オプションをチェックして、サービスがデスクトップと対話できるようにします。 サービスがデスクトップと対話することを許可するをクリックします


3

このエラーの原因の1つは、ローカルフォルダーのアクセス許可(Authenticated Users)が不十分であることです。「Authenticated Users」の権限を付与するにはフォルダのプロパティでセキュリティタブを開き、「Authenticated Users」グループを編集して追加し、変更を適用します。

これが完了すると、ネットワークサービスアカウントでもサービスを実行できました(これまでは、ローカルシステムアカウントでしか実行できませんでした)。


2

OWINとTopShelfを使用してWindowsサービスをホストしていました。起動できませんでした。同じエラー-「アクセスが拒否されました5」

私は私のビン/デバッグにすべての権限を与えることになりました。

問題はまだ解決されていません。

イベントログを確認したところMicrosoft.Owin.Host.HttpListener、OWINスタートアップクラスを含むクラスライブラリに含まれていないことがわかりました。

そのため、パーマなどに入る前に、イベントログを確認して根本的な原因を特定してください。


2
良い点-「アクセスが拒否されました」というエラーは、パーミッションとは何の関係もないかもしれません。常にイベントビューアでアプリケーションログを確認してください。
mhenry1384

こんにちは、私もこれをチェックしています。topshelfからこれにログを記録している `。\ logs`パスはどこにありますか
トランス

1

コードは、サービスの開始を許可されていないユーザーのセキュリティコンテキストで実行されている可能性があります。

あなたはWCFを使用しているので、あなたはNETWORK SERVICEのコンテキストにいると思います。

参照:http : //support.microsoft.com/kb/256299


1
出力ディレクトリに「ローカルサービス」と「ネットワークサービス」の権限を付与しました
Kris-I

また、システムサービス、のために設定されたグループポリシーに必要support.microsoft.com/kb/256345/EN-US
シラーズBhaiji

1

サービスインストーラーでLocalServiceアカウントの代わりにLocalSystemアカウントを使用します。

これは、サービスインストーラーのデザインビューで以下の変更を行うことで行うことができます
。ServiceProcess Installerのプロパティ->アカウントをLocalSystemに設定します。

または、サービスインストーラーのDesigner.csファイルを以下のように変更します。

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;

1

servicein service.mscを右クリックして、property

Path to executableC:\ Users \ Me \ Desktop \ project \ Tor \ Tor \ tor.exeのようなフォルダーパスが表示されます。

C:\ Users \ Me \ Desktop \ project \ Torに移動し、Torを右クリックします。

選択しpropertysecurityedit、その後add。テキストフィールドにと入力しLOCAL SERVICE、[OK]をクリックして、チェックボックスをオンにしますFULL CONTROL

addもう一度クリックして、を入力しNETWORK SERVICE、をクリックしてok、チェックボックスをオンにしますFULL CONTROL

次に[OK]をクリックします(下部)。


1

私の場合、実行可能ファイルがインストールされているフォルダーの「グループ名またはユーザー名」のリストに「Authenticated Users」を追加する必要がありました。



0

エラー5については、上記の解決策の反対を行いました。「最初のエラー5:アクセス拒否エラーは、ネットワークサービスアカウントに出力ディレクトリへのアクセス許可を与えることで解決されました。」

私は自分をネットワークサービスアカウントではなくローカルアカウントに変更しました。管理者としてログインしたため、うまくいきました。


0

サーバーマシンでこのエラーが発生する場合は、実際のWindowsサービスexeを取得したフォルダーへのアクセスを許可してください。[セキュリティ]タブに移動して、ローカルサービスをユーザーとして選択し、フルアクセスを付与する必要があります。exeについても同じようにする必要があります。


0

プロセスモニターを使用してsppsvc.exeを監視したところ、HKEY_LOCAL_MACHINE \ SYSTEM \ WPAキーに書き込もうとしていることがわかりました。このキーでNETWORK SERVICEにアクセス許可を与えた後、サービスを開始することができましたが、Windowsが突然、それが再びアクティブ化されたことを認識しました。


0

Local serviceソリューションが次のように切り替えられるため、誤ってサービスを実行するように設定しましたLocal System


0

これを理解しようとして数時間私の机を叩いた後、どういうわけか私の「メイン」メソッドはそのコードを空にしました!

ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] 
{ 
    new DMTestService()
};
ServiceBase.Run(ServicesToRun);

私が見つけた他の解決策:

  • .NET Frameworkを4.0に更新する
  • InitializeComponent()内のサービス名がインストーラーのサービス名プロパティと一致することを確認する

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
  • また、サーバーを再起動しても問題はありません

シュロップ



0

今日、開発中のサービスについてこの問題がありましたが、この質問に関する他の提案はどれも機能しませんでした。私の場合、サービスの実行元のフォルダーに.dll依存関係がありませんでした。

依存関係を追加すると、問題はなくなりました。


0

私の場合、プロジェクトをデスクトップ上に保持し、デスクトップにアクセスするには、フォルダーにアクセス許可を追加する必要があるため、プロジェクトフォルダーをC:\ディレクトリに移動するだけで、魅力的なように機能します。


0

私の答えが多くの人にとって意味があるかどうかはわかりませんが、私も同じ問題に直面し、解決策は途方もなく単純でした。管理者としてコードを実行するために使用したプログラムを開くだけで済みました。(右クリック->管理者として実行)。

それだけでした。


0

エラーポップアップが示唆するように、これは許可に関連しています。したがって、サービスを「LocalSystem」アカウントとして実行します。

上と同じ、右クリックを行うにserviceProcessInstaller -> Properties -> Accountしてまでそれを設定する"LocalSystem"デフォルトの代わりに"User"。サービスと出来上がりをインストールします。


これは実績のある修正であり、回避策はありません。
反対

0

詳細なエラーメッセージについては、Windowsイベントログを確認してください。イベントログを確認した後、同じことを解決しました。


-1

展開しているサービスでこの問題があり、この質問に関する他の提案はどれも機能しませんでした。私の場合、それは私の.config(xml)が無効だったためです。qualifからprodにコピーすると、コピーアンドペーストエラーが発生しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.