什麼是Registry 恩 我的觀念來看就是個人電腦的巨大DataBase 只是一種NoSQL的DB 操作方法就是SETVALUE GETVALUE
//寫Registry 廢話不多說 先奉上CODE
Using Microsoft.Win32;
RegistryKey shell = Registry.ClassesRoot.OpenSubKey(@"*\shell", true).CreateSubKey("你要寫的註冊");
shell.CreateSubKey("command");
RegistryKey shellInner = Registry.ClassesRoot.OpenSubKey(@"*\shell", true).OpenSubKey("你要寫的註冊", true).OpenSubKey("command", true);
shell.SetValue("Icon", "ICON路徑");
shell.SetValue("", "寫DEFAULT的內容");
shellInner.SetValue("", "執行的動作");
Registry.ClassesRoot.OpenSubKey(@"*\shell\你要寫的註冊", true).DeleteSubKey("command");
Registry.ClassesRoot.DeleteSubKey((@"*\shell\你要寫的註冊");
//--------------------------------------------------------------------------------------
在registry裡面"ClassesRoot"底下 的"*"就會有"你要寫的註冊"這個屬性<---這個是針對檔案的動作
如果要對檔案夾進行動作 就是把"*"改成"Directory"
Shell -->ShellEx 就會變成在下面 如果要做選單式的 就要用ContextMenu
//值得注意的點
值得注意的幾的點就是權限問題
因為我這一次的程式是要在安裝的時候去寫註冊擋 這樣刪除的時候才可以跟著刪除
問題就出現了
ClassesRoot一般程式不能操作 所以寫在這邊的註冊資料 一般程式只能讀不能寫<---WIN8以上都會 WINDOWS2012到是不會
LocalMachine一樣
Users一樣
CurrentConFig也一樣
但是
CurrentUser就不一樣了 一般的程式可讀可寫 這個從WIN7 WIN8 WIN10 皆可以
但是這個也有值得注意的地方 如果這東西寫在安裝檔 那就會變成安裝的時候不知道是給哪個USER 所以雖然程式寫的室CurrentUser
但是註冊檔會寫到User->.Default資料夾底下 導致你還是不能寫只能讀 讀還有可能讀錯路徑
所以這個要寫 要在應用程式寫 而不是在安裝檔裡面寫
結論雖然可以用 但是每次程式開起都要先寫一次為這個程式所用
PS1 還有在寫註冊擋呼叫應用程式的時候尾巴帶%1這個帶路徑的程式的時候
注意不要寫%1 這樣空格會變亂碼 要改成用"%1"
不要問為什麼不能用%2 我找了整個註冊檔沒看到%2
PS2 OpenSubKey("command", true); 開KEY的時候 不寫TRUE會導致你不能寫 如果只是要讀的話是可以不用寫TRUE
PS3 要刪除的話 如果有跟目錄 是刪不掉的 所以要從底層山上來
參考文件 :http://www.tomshardware.com/forum/165640-48-spyware-problem-command-regedit
https://msdn.microsoft.com/zh-tw/library/microsoft.win32.registrykey_methods(v=vs.110).aspx