C#で管理者でプロセスを開始する
-
29-09-2019 - |
質問
system.diagnostics.process.start()を使用してコマンドラインプログラムを開始し、管理者として実行する必要があります。
このアクションは、毎日スケジュールされたタスクによっても実行されます。
解決 5
私はそれを見つけました、私は一般的な設定で最高の特権でアプリケーションを実行するためにスケジュールされたタスクを設定する必要があります。
他のヒント
私はただ使用しようとしています:
Process p = new Process();
p.StartInfo.Verb = "runas";
これは、管理者としてプログラムを実行している場合に正常に機能しますが、スケジュールされたタスクが実行された場合、「Runas」を考慮してはいけません。
ログインとパスワードを使用してプロセスを実行するためのより安全なオプションは、SecureStringクラスを使用してパスワードを暗号化することです。ここにコードのサンプル:
string pass = "yourpass";
string name ="login";
SecureString str;
ProcessStartInfo startInfo = new ProcessStartInfo();
char[] chArray = pass.ToCharArray();
fixed (char* chRef = chArray)
{
str = new SecureString(chRef, chArray.Length);
}
startInfo.Password = str;
startInfo.UserName = name;
Process.Start(startInfo);
プロジェクトプロパティで安全でないコードを許可する必要があります。
この助けを願っています。
スケジュールされたタスクを使用している場合は、タスクを実行するユーザーとパスワードを設定できます。
タスク上の管理者資格情報を使用すると、大丈夫です。
と Process.Start
, 、あなたは供給する必要があります UserName
と Password
のために ProcessStartInfo
:
Process p = new Process("pathto.exe");
p.StartInfo.UserName = "Administrator";
p.StartInfo.Password = "password";
p.Start();
プログラムにクリアテキストにパスワードを保存することは、誰かがアプリケーションを熟読してその中にあるものを確認できる限り、決して安全ではないことに注意してください。 SecureStringを使用して保存されたパスワードをSecureStringパスワードに変換しても、クリアテキストパスワードが存在するため、より安全になりません。
SecureStringを使用する最良の方法は、メモリまたはハードドライブのどこにでも暗号化されていない完全なパスワードを必要としない、ある程度のコンバージョンのために単一の文字を渡すことです。そのキャラクターが変換された後、プログラムはそれを忘れて、次のプログラムに進みます。
これは、ユーザーによってコンソールに入力されているため、翻訳のためにキャラクターを通過することによってのみ行うことができます。