2009-11-12 22 views
10

しばらくの間、私のプログラムのインストーラは以下のコードを使って私のアプリケーションを管理者権限で実行しました。しかし、それはWindows 7の下で効果がないようだ。Vistaではそれは美しく働いた。ショートカットを右クリックして管理者として実行するように指示すると、プログラムは正常に起動します。しかし、以下のコードを使用することにより、常にプログラムを実行するようにコードを作成する必要があります。もうそれはありません。 Win 7がまだこのキーを使用しているかどうかは誰にも分かりますか? UACもやっています。レジストリのRUNASADMINがWindows 7で動作しないようです

Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\ 
CurrentVersion\AppCompatFlags\Layers", "C:\App\app.exe", "RUNASADMIN"); 

ありがとうございます。

答えて

6

私はWindows 7を使用しています。私はそのようなキーを見ることができます。しかし、私はそれがあなたのアプリケーションとインストーラを設定する適切な方法だとは思わない。

あなたのアプリケーション(app.exe)とともにマニフェストファイルを配布することをお勧めします。 Visual Studio 2008を使用している場合は、マニフェストファイルを実行ファイルに簡単に埋め込むこともできます。次に、マニフェストファイルで管理者権限を要求することができます。 win7の中

http://msdn.microsoft.com/en-us/library/bb756929.aspx

http://blogs.msdn.com/shawnfa/archive/2006/04/06/568563.aspx

http://channel9.msdn.com/posts/jmazner/How-To-Tell-Vistas-UAC-What-Privelege-Level-Your-App-Requires/

+0

ありがとうlextm。私はマニフェストファイルが私が作成しなかったexeファイルのために作ることができたことを知らなかった。あるいは、それらを埋め込む必要もなかった。リンクありがとう。 – JimDel

+0

@JimDel:これらのリンクはすべて、マニフェストの埋め込みに関連しているように見えます。私が作っていないexeファイルのために、どうすればそれをやるのか見てきましたか? – Pete

1

RUNASADMINは、KEYに配置されます:シールド5.1をインストールし使用して、値は以下のように実行するようappcpmctflgsin wow6432nodeexe actualy falisにHKLM\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\AppCompatFlags\\Layersをコピーする際に 管理者

+0

とそれを修正する方法! –

1

This answer by RobeNは、あなたのコメントに興味を持って「Lex Li's answer」と表記した「作成していないexeファイルのために」動作します。それはあなたの元のレジストリの考え方を使用します。

二つの関連する可能性の違い:32ビットOSで

  1. 、私は、ユーザーがあるかについて心配する必要はありません、代わりにHKCUHKLMを使用することによりWow6432Nodea concern mentioned by "uss"
  2. を心配する必要はありませんアプリケーション()を実行します。
8

私はこの質問に対する回答/回避策を持っています。

最初に、私はAppCompatFlagsを使用することが(アプリケーションとインストーラを設定する適切な方法ではない)というコメントに敬意を表します。レジストリのこのセクションを変更するだけで、Windows GUIを使用してミラーリングし、実行可能ファイルの特権レベルを変更します。マニフェストファイルを追加するよりも実装が簡単です。ユーザーが権限レベルを管理者として実行しないように変更する必要がある場合や、GUIで簡単に権限レベルを変更することができます。

とにかく、実行可能ファイルの特権レベルを管理者として実行するように設定しようとしたのと同じ問題がありました。 GUIで設定できることはわかっています。

  • ショートカットまたはを右クリックします。EXEファイルと互換性]タブ
  • (この時点で、あなただけ、またはすべてのユーザーのための特権レベルを設定することができます。私は、すべてのユーザーのためにそれをやって好む)の[プロパティ
  • クリックして選択し
  • ボタンをクリックして、変更すべてのユーザーの設定
  • 新しいプロパティ]ウィンドウで変更を保存するには[OK]を数回クリックし、「管理者としてこのプログラムを実行する」の特権レベルチェックの下
  • 「すべてのユーザーのための互換性」というタイトルのタブで開いています。

変更が保存されると、レジストリの設定を見つける:私はこのようにGUIを使用して管理者として実行する.exeを設定すると

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN" 

、それは常に動作します。

ただし、GUIを経由せずに直接レジストリを変更しようとすると、プログラムは管理者として実行されません。レジストリは私が変更を加えたことを示し、実行可能ファイルの特権レベルを見ると、管理者として実行がオンにチェックされています。

私は、レジストリを変更することで、管理者として.exe実行を行うには、いくつかの異なる方法を試してみました:

  • 手動で使用された.regファイル
  • から変更をインポートregeditを
  • でレジストリを編集しましたコマンドラインツールreg.exeを使用してレジストリを変更する
  • 現在使用していないWise Scriptツールを使用しました
  • 使用したAutoITスクリプト

これらの方法はすべて同じことをしました。レジストリが変更され、GUIがそのプログラムを管理者として実行する必要があることが示されましたが、プログラムは管理者として実行されません。

私が遭遇したこの問題の解決策は、先に進み、設定でHKCUキーとHKLMキーの両方を変更することです。あなたはこれらのレジストリのセクションの両方を変更した場合

[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN" 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 
"C:\\Program Files (x86)\\My Program\\My Program.exe"="RUNASADMIN" 

、そして.exeは、管理者として実行されます。さらに重要なのは、別のユーザーがPCにログインすると、プログラムは管理者として実行されることです。これは、後続のユーザーのためにHKCUセクションが作成されていないレジストリの変更にもかかわらずです。

私はここで何が起こっているのか分かりませんが、機能しています。

1

私は、以下のコマンドを使用して、レジストリにこのエントリを追加するためのCMDを使用:

reg ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /t REG_SZ /f /v "C:\Program Files (x86)\MyApp\myapp.exe" /d RUNASADMIN 

これはWin8Pro-32ビットで良い動作しますが、64bit版で動作しませ!
64ビットWindows上でこのコマンドを実行すると、最終的なインストール段階として32ビットインストーラが実行され、HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layersにエントリが作成されます。
いくつかの研究の末、私の友人であるH.Toosi)、我々は正しい解決策を見つけた。
はちょうどこのようなEARLIERコマンドの終わり/reg:64を追加:

reg ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" /t REG_SZ /f /v "C:\Program Files (x86)\MyApp\myapp.exe" /d RUNASADMIN /reg:64 

、すべてが、32および64ビットのOS(勝つ7 32ビット、32ビット勝利8、勝利8.1 64 - )で正常です。

関連する問題