6

「Local Service」としてログオンするように構成されたWindowsサービス「Service1」があります。

プログラムで起動するコンソール アプリケーションを作成しました。

        var service = new ServiceController("Service1");
        service.Start();

管理者コマンド プロンプトから ConsoleApplication1 を実行すると、スムーズに起動することがわかっています。

そして、昇格なしで実行すると、次のようになります。

システムエラー 5 が発生しました。

アクセスが拒否されました。

ただし、標高なしで開始する必要があります。

それは可能ですか、またはこれを達成する方法を変更する必要がありますか?

4

5 に答える 5

11

これを許可するように、サービス自体のACLを設定できます。SetACL.exeユーティリティを使用すると、これが(ある程度)簡単になります。例えば:

SetACL.exe -on "MyService" -ot srv -actn ace -ace "n:S-1-5-32-545;p:start_stop"

これにより、Usersグループ(S-1-5-32-545)のメンバーがMyServiceを開始および停止できます。

于 2013-03-19T17:58:26.867 に答える
4

私は torakリンクをたどり、サービスの権利に関するこの重要な違いを理解しています。

  • サービスには、「Run as」ユーザーに関する権限があります
  • サービスには、サービスを制御する (つまり、サービスを開始/停止する) ための異なるアクセス許可があります。

そのため、サービスを開始するには、サービス コントロールのアクセス許可を変更する必要があります。

さて、Service1 という Windows サービスを実行し、WIX でインストーラーを作成しました。セットアップ中にServiceInstallを呼び出します

      <ServiceInstall Id="ServiceInstaller" Type="ownProcess" Vital="yes"
       Name="Service1" DisplayName="Service1"
       Description="Service1 description"Start="demand"
       Account="NT AUTHORITY\LocalService"
       ErrorControl="ignore" Interactive="no" >
      </ServiceInstall>

次に、サービスを開始しようとする TestProgram というクライアント プログラムがあります。

var service = new ServiceController("Service1");
service.Start();

そして明らかに、(通常のユーザー アカウントで実行される) TestProgram の昇格なしでサービスを開始することはありません。

したがって、解決策は、 PermissionExタグを使用して、ユーザー グループのメンバー (たとえば) がサービスを開始/停止できるように WIX に指示することです。

<util:PermissionEx User="Users" ServiceStart="yes" ServiceStop="yes">
</util:PermissionEx>

お役に立てれば。皆さん、ありがとうございました。

于 2013-03-28T09:39:37.217 に答える
0

あなたにはできないと思います - これはセキュリティ上の理由によるものだと私は理解しています。マルウェアが自動的に自分自身を昇格させることは問題になります。

于 2013-03-19T10:35:57.780 に答える