問題背景:
某個c#程序需要已管理員權限啟動,並且有開機啟動的功能。
解決方案:
1、已管理員權限啟動參考c#程序以管理員權限運行。
2、開機啟動,參考代碼
public static void SetAutoRun(bool isAutoRun) { //設置是否自動啟動 if (isAutoRun) { string path = System.Windows.Forms.Application.ExecutablePath; Microsoft.Win32.RegistryKey rk2 = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run"); rk2.SetValue("App", @"""" + path + @""""); rk2.Close(); } else { Microsoft.Win32.RegistryKey rk2 = Microsoft.Win32.Registry.LocalMachine.CreateSubKey(@"Software\WOW6432Node\Microsoft\Windows\CurrentVersion\Run"); rk2.DeleteValue("App", false); rk2.Close(); } }
以上是最終解決方案,下面列出遇到的一些問題
1、為什么使用注冊表HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run。
答:開機啟動常用的方法是添加注冊表開機啟動項,可用的注冊表位置包括
HKEY_CURRENT_USER\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
其中帶WOW6432Node節點的是表示32位程序的
其中如果程序需要已管理員權限啟動,則需要寫入到HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run,如果過不需要已管理員權限啟動,則寫入HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
2、其他開機啟動方式