私はここで少し迷っています。
私はアプリを持っています。それを App1 と呼びましょう。
App1 は正常に動作します。場合によっては、App1 が別のプログラム App2 を実行する必要があります。
コードは簡単です:
/*call app2*/
ProcessStartInfo startInfo = new ProcessStartInfo(Convert.ToString(ConfigurationManager.AppSettings["pathActualizador"]));
startInfo.UseShellExecute = false;
try
{
System.Diagnostics.Process.Start(startInfo);
}
catch (ArgumentException)
{
MessageBox.Show("Error en parármetros enviados al Actualizador..", Properties.Resources.txtTituloAplicacion, MessageBoxButtons.OK, MessageBoxIcon.Information);
}
/*close app1 and letting app2 do its work*/
Application.ExitThread();
場合によっては、app2 を呼び出すための承認に問題があります。app1 は単純なシステムで、app2 はいくつかのファイルとフォルダーを作成、移動、および削除する必要があります (そのため、問題が発生しています) 少なくとも、管理者 de app2 として実行することで解決します。管理者として。
私はこれを解決しようとしています。ここSOでマニフェストファイルを作成することについて、私は多くの投稿を読みました。それで、私はそれを作成しました。アプリケーションプロジェクトから新しいアイテムを追加しました->新しいアイテムを追加-> app.manifest
そして、デフォルトで作成され、これだけが変更されました
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
このマニフェストは App1 用です。両方のアプリが 100 台ほどのコンピューターにあり、1 つずつ変更することはできません (ほとんどのアプリは別の国にあります)。ただし、変更するアプリケーションがあり、いくつかのコマンドを送信してインターネットをスローします。したがって、プロセスが別のプロセスを作成すると、この新しいプロセスはその親と同じ ExecutionLevel を持つことを読みました。そのため、App1 にマニフェストを追加すると、App2 のプロセスが作成され、管理者として実行されます。
私は正しいですか?
一方、マニフェストを追加してコンパイルし、.exe と .manifest をクライアントに送信して実行しましたが、同じ問題が残っています。特権。
何か問題がありますか?代わりに App2 のマニフェストを作成する必要がありますか? これはちょっと難しいです。マシンごとにウィンドウを構成するのも難しいです..
私は次のようなこともできると読んだ
startInfo.Verb = "runas";
しかし、将来(2008年にこれを言った)、これは無視することができ、唯一の方法はマニフェストを使用することも読んでください。だから私はこのオプションを避けたい
編集:Visual Studio 2010、.NET 3.5を使用
edit2:「runas」を試しましたが、動作しません。ユーザーは管理者ではないため、管理者の権限はありません