2017-05-20 4 views
-2

開発中のサービスで、ChangeServiceConfig2を呼び出して構成パラメータを変更する必要があります。この関数にはサービスハンドルが必要です。したがって、そのハンドルを得るために、サービスは成功したOpenSCManagerと、後でOpenServiceを呼び出します。 OpenService関数のパラメータlpServiceNameに、サービスの名前を指定しましたが、「アクセスが拒否されました」と表示されます。マニフェストファイルのアクセス権を「requireAdministrator」に変更しましたが、まだエラーが発生しました。 一般に、Windowsサービスはどのように処理されますか? 。どのようにWindowsサービスがそのハンドルを取得できますか?

+0

OpenService()は正しい呼び出しですが、サービス自体は再設定するために管理者権限で実行する必要があります。サービスを実行するように設定されているユーザーアカウントは何ですか? *なぜ*サービスは最初に自分自身を再設定する必要がありますか?それは非常に珍しい要件です。 –

+0

...マニフェストの設定は、サービスには影響しません。サービスのセキュリティコンテキストは、サービス構成によって完全に決定されます。 –

+0

通常は 'SERVICE_CHANGE_CONFIG'が必要です。' Administrators 'だけでなく 'SYSTEM'にも付与されています。しかし、これは具体的なサービスに依存します – RbMm

答えて

0

サービスを作成し、lpServiceStartName引数は、サービスがで実行されるセキュリティコンテキストを決定documentation for CreateServiceから

:このパラメータがNULLである

場合は、CreateServiceはLocalSystemアカウントを使用しています。

サービスが管理者権限で実行されるためには、アカウント名の代わりにNULLを指定する必要があります。コメントによると、あなたは現在ローカルサービスとして実行しています。これは管理者権限を与えません。

+0

ありがとうハリー。できます。 –

関連する問題