close

什麼是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

arrow
arrow
    文章標籤
    WINFORM C# REGISTRY
    全站熱搜
    創作者介紹
    創作者 丁滿 的頭像
    丁滿

    小丁的部落格

    丁滿 發表在 痞客邦 留言(0) 人氣()