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;
}
アカウントに許可を与えることで上記の問題を解決しましたNETWORK SERVICEしかし、今は別の問題があります:
サービスを開始できません。 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 ....
私はこの投稿が古いことを知っていますが、顕著な解決策はなく、私はこれをどのように解決したかを投げ入れたかっただけです。
最初のError 5: Access Denied
エラーは、NETWORK SERVICE
アカウントに出力ディレクトリへのアクセス許可を与えることで解決されました。
2番目のStarted and then stopped
エラーは、何かがサービスに障害を起こしたときの一般的なメッセージのようです。実際のエラーメッセージについては、イベントビューア(特に「Windowsログ>アプリケーション」)を確認してください。
私の場合、app.configのサービス構成設定が不適切でした。
コンピューター->管理->サービス-> [サービス]プロパティ。次に、アカウント情報のタブ。管理者アカウントなどでサービスを実行するなど、これらの設定を試してください。
それは私のためにそれをしました。
編集:問題はまた、ほとんどのサービスがLOCAL SERVICE
またはLOCAL SYSTEM
アカウントとして実行されていることです。これらのアカウントでC:/my-admin-dir/service.exe
を実行しても、そのディレクトリで何も実行できない場合、error 5
が取得されます。したがって、サービスの実行可能ファイルRMBディレクトリ-> [プロパティ]-> [セキュリティ]を探し、サービスを実行するアカウントがalloewdを完全に制御できるユーザーのリストにあることを確認します。ディレクトリ。
これは私のために働いた。
また、同じエラーが発生しました。[サービス]> [プロパティ]> [ログオン]> [ローカルシステムアカウント]を右クリックして解決しました。
Path to executable
が実際の実行可能ファイルを指していることを確認します(右クリックして[サービス]-> [プロパティ]-> [全般]タブ)。 powershell(およびsc.exe)を介して、実行可能ファイルを指定せずにサービスをインストールできます...
私は解決策を得ました:
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"
これで、サービスを開始できます。
このエラーは、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();
}
}
私にとって-サービスを実行するフォルダとその中のファイルは、Windowsの「暗号化」オプションを使用して暗号化されました。それを削除して-出来上がり!
OWINとTopShelfを使用してWindowsサービスをホストしました。開始できませんでした。同じエラー-「アクセス拒否5」
最終的にすべての権限をビン/デバッグに付与しました。
それでも問題は解決しませんでした。
そのため、イベントログを見て、Microsoft.Owin.Host.HttpListener
がOWINスタートアップクラスを含むクラスライブラリに含まれていないことがわかりました。
そのため、パーマなどに入る前に、イベントログを確認して根本原因を特定してください。
このエラーの原因の1つは、ローカルフォルダーのアクセス許可(認証されたユーザー)が不十分なことです。 「認証済みユーザー」にアクセス許可を付与するにはフォルダーのプロパティでセキュリティタブを開き、「認証済みユーザー」グループを編集して追加し、変更を適用します。
これが完了すると、ネットワークサービスアカウントでもサービスを実行できました(これまでは、ローカルシステムアカウントでしか実行できませんでした)。
Service InstallerでLocalServiceアカウントの代わりにLocalSystemアカウントを使用します。
これは、サービスインストーラーのデザインビューで以下の変更を行うことで実行できます。
Service Process Installerのプロパティ->アカウントをLocalSystemに設定します。
またはサービスインストーラーのdesigner.csファイルで以下の変更を行います。
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalSystem;
コードは、サービスの開始を許可されていないユーザーのセキュリティコンテキストで実行されている可能性があります。
WCFを使用しているため、NETWORK SERVICEのコンテキストにいると推測しています。
ここから受け入れられた答えを誤読したため、このエラーが発生していました: 実行可能ファイルからWindowsサービスを作成 。
sc.exe create <new_service_name> binPath= "<path_to_the_service_executable>"
<path_to_service_executable>
には、実行可能ファイルのフォルダーのパスを使用していました。 C:\Folder
。
それは実行可能ファイルのパスである必要があります、例えばC:\Folder\Executable.exe
。
うまくいけば、これは私と同じ愚かな間違いを犯した人を助けます。
Service.mscでservice
を右クリックし、property
を選択します。
C:\ Users\Me\Desktop\project\Tor\Tor\tor.exeのようなPath to executable
の下にフォルダーパスが表示されます。
C:\ Users\Me\Desktop\project\Torに移動し、Torを右クリックします。
property
、security
、edit
を選択してから、add
を選択します。テキストフィールドに「LOCAL SERVICE
」と入力し、[OK]をクリックして、[FULL CONTROL
]ボックスをオンにします
add
をもう一度クリックしてからNETWORK SERVICE
と入力し、ok
をクリックして、FULL CONTROL
ボックスをオンにします
次に、[OK]をクリックします(下部)。
私の場合、実行可能ファイルがインストールされたフォルダーの「グループまたはユーザー名」のリストに「認証済みユーザー」を追加する必要がありました。
これを把握しようとして数時間デスクを叩いた後、なんとかして「メイン」メソッドがコードを空にしてしまいました!
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[]
{
new DMTestService()
};
ServiceBase.Run(ServicesToRun);
InitializeComponent()内のサービス名がインストーラーのサービス名プロパティと一致することを確認する
private void InitializeComponent()
...
this.ServiceName = "DMTestService";
そして、素敵なサーバーの再起動は痛くない
シュロップ
プロセスモニターを使用してsppsvc.exeを監視しましたが、HKEY_LOCAL_MACHINE\SYSTEM\WPAキーへの書き込みを試みていることがわかりました。このキーでNETWORK SERVICEにアクセス許可を与えた後、サービスを開始することができ、Windowsは突然アクティブになったことを突然認識しました。
私の場合、プロジェクトをデスクトップに保持し、デスクトップにアクセスするには、フォルダーにアクセス許可を追加する必要があるため、プロジェクトフォルダーをC:\ディレクトリに移動するだけです。
本日、開発中のサービスでこの問題が発生しましたが、この質問に関する他の提案はいずれも機能しませんでした。私の場合、サービスを実行したフォルダーに.dll依存関係がありませんでした。
依存関係を追加すると、問題はなくなりました。
エラー5については、上記の解決策とは反対のことを行いました。 「最初のエラー5:アクセス拒否エラーは、NETWORK SERVICEアカウントに出力ディレクトリへのアクセス許可を与えることで解決しました。」
ネットワークサービスアカウントではなくローカルアカウントに変更しました。管理者としてログインしていたため、機能しました
http://www.sysinternals.com 。からProcess Utilities > Process monitor
を見てください
これは、プロセスの実行内容を監視できるツールです。このサービスプロセスを監視すると、どこかでアクセスが拒否され、アクセスが拒否されたリソースが表示されます。
サーバーマシンでこのエラーが発生する場合は、実際のWindowsサービスexeを取得したフォルダーへのアクセスを許可してください。セキュリティタブに移動し、ユーザーとしてローカルサービスを選択し、フルアクセスを許可する必要があります。 exeでも同じことを行う必要があります。
私の答えが多くの人にとって意味があるかどうかはわかりませんが、私も同じ問題に直面し、解決策はとてつもなく簡単でした。管理者としてコードを実行するために使用したプログラムを開くだけでした。 (右クリック->管理者として実行)。
それだけでした。
場合によっては、システムがローカルディスクの空き領域を使い果たします。
Local service
ソリューションがLocal System
に切り替わるように実行するように誤ってサービスを設定しました
エラーポップアップが示すように、これは許可に関連しています。そのため、「LocalSystem」アカウントとしてサービスを実行します。
同じことを行うには、serviceProcessInstaller -> Properties -> Account
を右クリックして、デフォルトの"LocalSystem"
ではなく"User"
に設定します。サービスと出来上がりをインストールします。