7

UAC警告を必要としないファイルがあります。C#.NETを使用してファイルを別の場所にコピーしました

 File.Copy("Original.exe", "Copy.exe");

これで、Copy.exeをWindows 7/Vistaで実行するにはUAC警告が必要であることがわかりました。

Original.exeとCopy.exeを比較して、ファイルに何が起こったのかを正確に確認し、UACを必要としないように手動で変更するにはどうすればよいですか。それを達成するためにどのツールを使用できますか?

ここに画像の説明を入力してください

両方の実行可能ファイルは同じファイルです:これら2つのファイルの違いを知る方法は?

4

3 に答える 3

6

WindowsInstaller Detection Technologyがそのような動作の理由です。実行可能ファイルを管理者権限が必要であると見なすように強制する一連の条件があります。

  1. 32ビット実行可能ファイル
  2. requestedExecutionLevelのないアプリケーション
  3. LUAが有効になっている標準ユーザーとして実行されている対話型プロセス

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

  • ファイル名には、「インストール」、「セットアップ」、「更新」などのキーワードが含まれます。
  • 次のバージョン管理リソースフィールドのキーワード:ベンダー、会社名、製品名、ファイルの説明、元のファイル名、内部名、およびエクスポート名。
  • 実行可能ファイルに埋め込まれたサイドバイサイドマニフェストのキーワード。
  • 実行可能ファイルにリンクされている特定のStringTableエントリのキーワード。
  • 実行可能ファイルにリンクされているRCデータの主要な属性。
  • 実行可能ファイル内のターゲットバイトシーケンス。

関連するMSDNの記事:http ://technet.microsoft.com/en-us/library/cc709628%28WS.10%29.aspx

可能な解決策:

  • 実行可能ファイルの作成者である場合は、指定されたマニフェストを含めますrequestedExecutionLevel
  • ソースコードにアクセスできない場合は、適切なユーティリティ(mtたとえば、一般的なリソースエディタなど)を使用してマニフェストを追加または変更してみてください。
  • キーワードupdateを避けinstallsetup実行可能ファイル名に
于 2012-07-16T08:21:48.643 に答える
1

ファイルをコピーした後、次のようにファイルの acl を設定してみてください。

var file = new FileInfo("copy.exe")
 var fileSecurity = file.GetAccessControl();
 fileSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null),
                                                                FileSystemRights.FullControl,
                                                                AccessControlType.Allow));
 file.SetAccessControl(fileSecurity);
于 2012-07-16T07:32:52.037 に答える
0

問題はファイルではなく場所にあることに気付くかもしれません。Win 7は、特にプログラムファイルで何かを変更しようとすると、非常に煩雑になります。

元のファイルを新しい場所に配置して、UACの承認も必要かどうかを確認しましたか?

于 2012-07-15T22:32:21.857 に答える