C#でファイルのUAC設定を設定する
-
02-10-2019 - |
質問
クライアントコンピューター.exeにも既に存在している)許可を与えたいと思います。
私が許可を与えたいファイルはすでにターゲットマシン上にあることに注意してください。また、C#で書かれた別のプログラムを通じてそのファイルの権限を変更したいと考えています。
私にそれをする方法を教えてください私はこのコードを使用しています
System.Security.AccessControl.FileSecurity fs = File.GetAccessControl(@"c:\inam.exe");
FileSystemAccessRule fsar = new FileSystemAccessRule("Everyone", FileSystemRights.FullControl, AccessControlType.Allow);
fs.AddAccessRule(fsar);
File.SetAccessControl(@"c:\inam.exe", fs);
このコードは権限を正しく変更しますが、このコードを実行した後にinam.exeを実行すると、UACが表示されず、inam.exeは管理操作を実行できます。
実際、私はすでに10,000人以上のクライアントにアプリケーションを展開しているため、管理権の問題を解決するためのパッチをリリースしたいと考えています。
解決
マニフェストファイルを作成します(参照してください http://www.gregcons.com/kateblog/addingamanifesttoavistaapplication.aspx 他の場所の中でも)そしてそれをwhaty.exe.manifestに名前を付けて、exeと同じフォルダーに入れます。 NANIFESTは、RequestExecutionLevelをexpeadMinistratorに設定する必要があります。準備完了。
もう一方のexeを所有している場合、構築するときにマニフェストを埋め込むことができます。これは、Visual Studio 2008以上でほぼ些細なことです。 [アプリケーション]タブを参照して、マニフェストのドロップダウンをドロップダウンします。近くに指示があります。また、VS 2008を使用してプロジェクトにマニフェストを追加する場合、すべてのXMLを入力する必要はありません。適切な要求された実行レベルを、生成されたコメントからコピーするだけです。
他のヒント
管理特権で実行することは、ファイルの許可ではありません。
これは通常、追加によって構成されます マニフェストファイル (exeのwin32リソース、または外部マニフェストとして)。このマニフェストファイルは、アプリケーションを上昇させる必要があるかどうかを述べることができます。
Windowsが「このプログラムを管理者として実行する」互換性の設定をどこに隠しているのか完全にはわかりません。
マニフェストファイルを使用することが最良のアプローチですが、別のファイルは、「このプログラムを管理者として実行する」フラグ(EXEのプロパティの互換性タブで見つけるオプション)を、単純なレジストリキーを設定して設定することです。これらのキーの1つに文字列値(REG_SZ)を作成する必要があります(それぞれ設定をユーザーまたはマシンごとにしたい場合):
hkey_current_user software microsoft windows nt currentversion appcompatflags layers
また
hkey_local_machine software microsoft windows nt currentversion appcompatflags layers
値の名前は実行可能ファイルへのフルパスである必要があります(パスにスペースが含まれている場合、引用符でパスを囲まない場合)、値のデータに文字列が含まれている必要があります RUNASADMIN
.