web-dev-qa-db-ja.com

昇格された特権でサインイン/ログオンする任意のユーザーでアプリケーションを実行する

昇格された特権を持つがUACプロンプトがない、任意のユーザーサインイン(またはローカルまたはリモートのセッション接続)でアプリケーションを実行しようとしています。新しいユーザーが追加されると、アプリケーションは追加のセットアップなしで、彼のサインインでも実行されるはずです。

テスト目的で、Windows 10 Enterprisev.1709を使用してHyper-Vマシンをセットアップしました。その上に、Administratorsグループにあるメイン(「Admin」と呼ばれる)アカウントと、Usersグループにのみある1つの(「User」と呼ばれる)アカウントがあります。

現在のユーザーと管理者権限があるかどうかを表示する簡単なWPFアプリケーションを作成しました。最終的なアプリケーションもWPFになります。

WiXを使用して、アプリケーションスイート(前述のアプリケーション、Windowsサービス、その他)のインストーラーを作成します。タイトルの動作は、インストール時に自動的に設定する必要があります。インストール時には、WiXの機能だけに制限されて、やりたいことができますが、セットアップ中にカスタムアプリケーション(C#)を実行できるので、制限はないと思います。インストールは、管理者権限を持つアカウントから実行されます。

以下は私が試したことと結果でした:

C:\ ProgramData\Microsoft\Windows\Start Menu\Programs\StartUpのアプリ

  • 「このプログラムを管理者として実行する」がチェックされていない

    管理者:開始、管理者権限なし

    ユーザー:開始、管理者権限なし

  • 「このプログラムを管理者として実行する」をすべてのユーザーに対してチェック

    管理者:起動しません

    ユーザー:起動しません

HKLM\Software\Microsoft\Windows\CurrentVersion\Runのエントリ

  • 「このプログラムを管理者として実行する」がチェックされていない

    管理者:開始、管理者権限なし

    ユーザー:開始、管理者権限なし

  • 「このプログラムを管理者として実行する」をすべてのユーザーに対してチェック

    管理者:起動しません

    ユーザー:起動しません

タスクスケジューラ、「任意のユーザーのログオン時」をトリガー

  • 他のオプションはありません

    管理者:起動しません

    ユーザー:起動しません

  • 「最高の権限で実行」がチェックされている

    管理者:開始、管理者権限

    ユーザー:起動しません

  • 「このプログラムを管理者として実行する」をすべてのユーザーに対してチェック

    管理者:起動しません

    ユーザー:起動しません

  • すべてのユーザーに対して「このプログラムを管理者として実行する」がチェックされ、「最高の特権で実行する」がチェックされる

    管理者:開始、管理者権限

    ユーザー:起動しません

どうすればそれができますか?アプリケーションがまったく実行されていない場合、イベントビューアは特定の情報をログに記録しないようです。それはそこにあるべきですか、それともそのようなログはどこかに置かれるかもしれませんか?ではどこ?

ターゲット:Windows 8以降、Server2012以降

1
Mars

GUIが必要な場合、これを処理する正しい方法は、GUIアプリと別のシステムサービスを用意することです。サービスは実際の作業を行い、GUIはコマンドをサービスに渡すだけです。偽装を使用して、サービスがユーザーとして機能できるようにすることができます。


管理者アクセスが必要な唯一の理由がHKLMキーへの書き込みである場合、管理者アクセスはこれを行うための間違った方法です。インストーラーで、レジストリキーを作成し、キーのACLを変更して、ユーザーが書き込みアクセスできるようにします。そのようにアプリを実行するために管理者権限は必要ありません。

3
longneck