web-dev-qa-db-ja.com

プログラムを管理者権限制限またはUACなしで*実行させる。

通常は管理者権限を必要とする(UAC経由で)プログラムをそれらなしで実行するように強制できる方法はありますか? (すなわち:UACプロンプトなし、システム全体へのアクセスなし。)

追加:実行ファイル自体を変更することなく。


Jamesの答えにもかかわらず、私はそれがほとんどできるといういくつかの方法を見つけました:

  1. 実行ファイルを修正することで、マニフェストからtrustInfoエントリを削除することができます(または、マニフェスト全体、つまり外部のエントリを使用できます)。これにより、プログラムをUACなしで起動できます。残念ながら、これは実行可能ファイルを変更するので、内部チェックサムテストのために間もなく終了します。
  2. Process Explorerを使用すると、制限付きユーザーとして起動できます。ただし、これは私が望むよりもかなり制限が大きいようです(保護モードIEのように実行されるので、私の標準的な非管理者ユーザーよりもはるかに少ないアクセスしかできません)。
114
Andrew Russell
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\Shell\forcerunasinvoker]
@="Run without privilege elevation"

[HKEY_CLASSES_ROOT\*\Shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

このテキストを<name_of_file>.regに保存して、Windowsレジストリに追加します。 (ダブルクリックするとうまくいくはずです。)

その後、管理者権限なしで実行したいアプリを右クリックして、[権限昇格なしで実行]を選択します。

場合によっては、わずか0.1%のプログラムがUACプロンプトについて2回質問することがあります。

71
Vom

nonadmin.batに保存します。

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

これでプログラムをこれにドラッグアンドドロップして管理者なしで実行することができます。

このレジストリキーを変更するのと同じように、管理者権限は必要ありません。また、コンテキストメニューが乱雑になることもありません。

Vomの 回答に基づく


更新:名前にスペースが含まれているプログラムでも動作するはずです。

48
Hjulle

私はパーティーに遅すぎないことを願っていますが、私は同様の質問を探していました、そして答えを見ないでここで私はWindowsのビルトインRunAsコマンドが管理者として実行されるとき/trustlevelスイッチでそれを実行できることを知りました。

RUNAS /trustlevel:<TrustLevel> program

/showtrustlevels  displays the trust levels that can be used
                  as arguments to /trustlevel.
/trustlevel       <Level> should be one of levels enumerated
                  in /showtrustlevels.

これは私の場合はうまくいきました。皮肉なことに、昇格なしでプログラムを明示的に開始するには、昇格したコマンドプロンプトが必要です。図に行きます。 :)私はそれがあなたを助けることを願っています。

33
Mxx

UACなしで常に実行したい特定のアプリケーションがある場合は、それをレジストリでターゲットに設定できます(テキストをREGファイルに追加してレジストリにインポートします)。

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers]
"C:\\example\\application.exe"="RunAsInvoker"

この答え とは異なり、このソリューションではクリックやユーザー操作の変更は不要です。

MicrosoftはこのプロセスをRunAsInvoker"Compatibility Shim" を追加して呼び出します。

13
palswim

私は今日、MSアプリケーションカスタマイズツールキットを使用してこの問題を解決しました。

私は の技術共和国の記事 の指示に従った。

基本的に:

1)MS here からツールキットを入手します。

2)[修正]をクリックします

3)RunAsInvokerオプションを選択します

4)修正を右クリックして「インストール」を選択します

3
user53639

管理(特権)が必要なセットアップ(インストール)exeファイルの場合、昇格されたアクセスなしで実行するためのトリックがあります。

ファイルの名前にsetupinstallなどの単語が含まれている場合、昇格されたアクセスを必要としない場合でも、昇格されたアクセスで強制的に実行されます。

enter image description here

.exeファイルにマニフェストが含まれている場合、これらの昇格のヒューリスティックは適用されません。

これはUAC(ユーザーアカウント制御)のドキュメントに記載されています。

インストーラー検出はセットアップファイルを検出します。これにより、ユーザーの知らないうちに同意なしでインストールが実行されるのを防ぎます。

インストーラー検出は以下にのみ適用されます。

  • 32ビットの実行可能ファイル。

  • 要求された実行レベル属性のないアプリケーション。

  • UACが有効な標準ユーザーとして実行されている対話型プロセス。

32ビットプロセスを作成する前に、次の属性をチェックして、それがインストーラーであるかどうかを判断します。

  • ファイル名には、「インストール」、「セットアップ」、「更新」などのキーワードが含まれます。

  • ...

ここでの読み取りモード: https://docs.Microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works

1
Shayan

Andrewは、彼の質問に答えている間に、次のようにはうまくいかなかったと述べました。

実行可能ファイルを修正することによって、マニフェスト(またはマニフェスト全体)からtrustInfoエントリを削除して、UACなしでプログラムを起動できるようにすることができます。残念ながら、これは実行可能ファイルを変更するので、内部チェックサムテストのために間もなく終了します。

使用していたソフトウェアの外部.manifestファイルを変更して変更することができました

<ms_asmv2:requestedExecutionLevel level="requireAdministrator" uiAccess="false" />

<ms_asmv2:requestedExecutionLevel level="asInvoker" uiAccess="false" />

私が使っていたソフトウェアは本当に管理者権限を必要としなかったので、私はUACまたは管理者パスワードなしで標準ユーザーアカウントでそれを実行することができました。ありがとうございます。

1
Aurimas