UAC対策
無効にしたくはないけど、特定のプログラムは頻繁に立ち上げるんで聞かれたくないとか。
アプリ内で昇格してしまおうという。
もちろんリスクにはつながるけど。
class Program { static void Main( string[] args ) { if( args.Length == 0 ) { return; } ExecuteProcess( args[0] ); } static private void ExecuteProcess( string path ) { Console.WriteLine( path + "を起動しています。" ); string currentBack = Environment.CurrentDirectory; Environment.CurrentDirectory = Path.GetDirectoryName( path ); try { Process.Start( path, ConfigurationManager.AppSettings["user"] , ConvertSecureString( ConfigurationManager.AppSettings["password"] ) , ConfigurationManager.AppSettings["domain"] ); } catch (Exception e) { Console.WriteLine( e ); } Environment.CurrentDirectory = currentBack; } static private SecureString ConvertSecureString( string p ) { if (p == null) { return null; } SecureString ss = new SecureString(); foreach (char item in p) { ss.AppendChar( item ); } return ss; } }
AppSettings 内の文字列を暗号化しとくともっといいよね。
<?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="user" value="Administrator" /> <add key="password" value="" /> <add key="domain" value="" /> </appSettings> </configuration>