web-dev-qa-db-ja.com

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

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

alt text

これまでの私のコード:

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しかし、今は別の問題があります:

alt text

アップデート#2

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

89
Kris-I

私はこの投稿が古いことを知っていますが、顕著な解決策はなく、私はこれをどのように解決したかを投げ入れたかっただけです。

最初のError 5: Access Deniedエラーは、NETWORK SERVICEアカウントに出力ディレクトリへのアクセス許可を与えることで解決されました。

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

私の場合、app.configのサービス構成設定が不適切でした。

109
Justin Skiles

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

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

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

24
Mike de Klerk

これは私のために働いた。

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

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

12
Asmita Chavan

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

8
ath

私は解決策を得ました:

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"

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

6
John

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

enter image description here

4
Akshay Anand

このエラーは、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
santhosh

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

サービスのプロパティを開き、[log on]タブを選択して、サービスがデスクトップと対話できるようにするオプションをオンにします click allow service to interact with desktop

3
kudzai zishumba

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

2

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

最終的にすべての権限をビン/デバッグに付与しました。

それでも問題は解決しませんでした。

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

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

2
Rashmi Pandit

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

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

1
Vijay kumar.S

Service InstallerでLocalServiceアカウントの代わりにLocalSystemアカウントを使用します。

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

またはサービスインストーラーのdesigner.csファイルで以下の変更を行います。

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
1
Jay Shah

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

WCFを使用しているため、NETWORK SERVICEのコンテキストにいると推測しています。

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

1
Shiraz Bhaiji

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

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

<path_to_service_executable>には、実行可能ファイルのフォルダーのパスを使用していました。 C:\Folder

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

うまくいけば、これは私と同じ愚かな間違いを犯した人を助けます。

1

Service.mscでserviceを右クリックし、propertyを選択します。

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

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

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

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

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

1
MagTun

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

1
Sankar

これを把握しようとして数時間デスクを叩いた後、なんとかして「メイン」メソッドがコードを空にしてしまいました!

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

私が見つけた他のソリューション:

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

    private void InitializeComponent()
    ...
    this.ServiceName = "DMTestService";
    
  • そして、素敵なサーバーの再起動は痛くない

シュロップ

0
Szhlopp

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

0

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

0
Ali786

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

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

0
Frank Bryce

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

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

0
Chris

http://www.sysinternals.comからProcess Utilities > Process monitorを見てください

これは、プロセスの実行内容を監視できるツールです。このサービスプロセスを監視すると、どこかでアクセスが拒否され、アクセスが拒否されたリソースが表示されます。

0

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

0
Darshana

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

それだけでした。

0
Rai

場合によっては、システムがローカルディスクの空き領域を使い果たします。

0

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

0
meda

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

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

0
Sisir