まず第一に、はい、私はインターネットでこのトピックについて検索していましたが、私の場合はもう少し具体的であるため、これが私の質問の理由です。
私のアプリは、Visual Studio .NET2005でFramework2.0、C#を使用して開発された実行可能なwinformアプリです。
アプリは、コマンドラインでいくつかのコマンドを実行する必要があります。このコマンドは、管理者として実行する必要があります。
実際に機能するコードは次のとおりです。
string output = "";
Process Consola = new Process();
ProcessStartInfo ConsolaStartInfo = new ProcessStartInfo();
ConsolaStartInfo.FileName = "cmd.exe";
ConsolaStartInfo.WorkingDirectory = System.Environment.SystemDirectory;
ConsolaStartInfo.UseShellExecute = !NeedOutput;
ConsolaStartInfo.RedirectStandardOutput = NeedOutput;
Consola.StartInfo = ConsolaStartInfo;
ConsolaStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
ConsolaStartInfo.CreateNoWindow = true;
ConsolaStartInfo.Arguments = "/C " + CommandToPerform;
ConsolaStartInfo.Verb = "runas";
Consola.Start();
Consola.WaitForExit();
どこ:
CommandToPerform is a string var with a command
NeedOutput is true or false depending if i need a return output or not.
(This works)
最初のヒントは次のとおりです。このアプリケーションは、Windows7で管理者としてVisualStudioを実行している場合に期待どおりに完全に機能します。
2番目のヒントは次のとおりです。このアプリケーションは、管理者としてではなくVisual Studioを実行している場合は期待どおりに完全に機能しますが、コマンドラインが実行されるたびに、プロセスは画面上でセキュリティ検証を要求します(UAC)
はい、マニフェストを操作しようとしましたが、コンパイルするのに多くの問題があります。時々9009エラー、多くの種類のエラーを返します。
だから私の質問は:
1)ユーザーに権限を要求せずにそれを行うことは可能ですか?アプリケーションはサイレントである必要があります。これが本当の質問です。もしそうなら...
2)アプリケーションのマニフェストを管理者としてこのコマンドを実行するように定義するにはどうすればよいですか?私は何かが恋しいですか?それはアプリケーションと同じサインですか?
3)私のアプリは、管理者として実行せずに管理者としてこれらのコマンドを実行できますか?これは完璧なシナリオです。このアプリを使用するユーザーは、管理者になることはできません。
4)これはXPで動作しますか?XPはUACを要求しますか?(最小要件バージョンを開発するまで、XPでテストすることはできません)
あらゆる種類のアイデア/解決策/ヒントが高く評価され、決勝で解決策でない場合は、より良い回避策が回答としてマークされます(私は100%の割合です)
ノート:
- クライアントの要件により、フレームワークを2.0から上記のエディションに移行できません。
- クライアントの要件により、Visual Studio.NET2005を上記のエディションに移行できません。
- アプリケーションは、XP(SPなし)からWindows7までのすべてのエディションで実行する必要があります
- はい、回避策を使用できます。IFが「Microsoftポリシー」およびアプリの要件に基づいている場合(Framework 2.0、APIなど、Microsoft以外のmod / controls / libraryは使用できません)
編集:
- 次の場所にキーを追加するソリューション:HKEY_CURRENT_USER \ Software \ Microsoft \ Windows NT \ CurrentVersion \ AppCompatFlags \LayersWORKED。
ただし、アプリケーションを実行すると、(一般的なUACプロンプトを使用して)アクセス許可のプロンプトが表示されます