Cygwinでsudoもどき
Vistaを使ってると、たまに管理者権限じゃないと触れないファイルがあって鬱陶しい。そこで、Cygwin上でsudoもどきをやるためのコードを組んだ。
引数のファイルをパスから探し、管理者権限で実行する。以下ソース。
using System; using System.IO; using System.Diagnostics; using System.Security; using System.Security.Principal; class sudo { static private string SearchPath(string file){ if(File.Exists(file)){ return file; } if(Path.GetExtension(file)==String.Empty){ file = file + ".exe"; } string path = System.Environment.GetEnvironmentVariable("Path"); string [] patharray = path.Split(new Char[] {';'}); foreach(string p in patharray){ string filename = p + "\\"+file; if(File.Exists(filename)){ return filename; } } return null; } static void Main(string[] args){ if(args.Length ==0 ){ Console.WriteLine("Usage: sudo filename"); return; } string filename = args[0]; string full_filename = SearchPath(filename); if (full_filename == null){ Console.WriteLine("sudo: " + filename + ":command not found"); return; } ProcessStartInfo si = new ProcessStartInfo(); si.UseShellExecute = true; si.WorkingDirectory = Environment.CurrentDirectory; si.FileName = full_filename; if(args.Length >1) { si.Arguments = args[1]; } si.Verb = "runas"; try{ Process p = Process.Start(si); }catch{ return; } } }
使い方。
% cd /etc % sudo vim hosts
管理者権限への昇格ダイアログが出れば成功。
ちなみにviはvimへのショートカットになっているが、Cygwin独自形式で、こうかいてある。
!vim.exe
それをちゃんと読んで処理すればviと書いてもvimが起動するようにできるが、これはとりあえず今後の課題(手抜き)。