以前用winform 進行開機自動啟動,很簡單的,配置下系統資料庫資訊就行了。
最近做了個項目,同樣的代碼,就是不起作用,研究了下,記錄在此。
一. 設定開機自動啟動的代碼
try
{
string path = System.Windows.Forms.Application.ExecutablePath;
string strnewName = "我的程式名";
if (!isAuto)
{
//修改系統資料庫,使程式開機時不自動執行。
Microsoft.Win32.RegistryKey Rkey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
Rkey.DeleteValue(strnewName, false);
MessageBox.Show("程式設定完成!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
if (!File.Exists(path ))//指定檔案是否存在
return;
Microsoft.Win32.RegistryKey Rkey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (Rkey == null)
Rkey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run");
Rkey.SetValue(strnewName, path);//修改系統資料庫,使程式開機時自動執行。
MessageBox.Show("程式設定完成,重新啟動計算機後即可生效!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}catch(Exception ee)
{
MessageBox.Show(ee.Message);
}
至此,第一步完結,重新開機電腦
二, 重新開機電腦後,msconfig 打開系統配置界面
在此檢視你配置的自動啟動項,如果是win7系統,還有可能因為權限問題,對設定的啟動項不進行加載等問題。 此時使用administrator 登入,在上圖裡的第一個頁籤裡,選擇正常啟動選項即可
三。 如果你的程式還是沒有啟動。
這時候很可能就是使用配置檔案或讀取其他本地檔案的時候,因為路徑問題,導緻的程式錯誤了。
開機自動啟動時,程式直接由系統執行啟動指令,此時如果使用 Environment.CurrentDirectory 可能導緻目錄指向C槽System檔案夾。
是以,在程式裡一般不要使用Environment.CurrentDirectory ,如果要擷取程式根目錄,還是老實的使用Application.StartupPath 吧