2010-05-25 87 views
0

我已經創建了一個應用程序與Windows啓動時啓動的選項。 首先,我通過註冊表這樣做,就像這樣:與Windows啓動C奇怪的行爲#

private void RunOnStartup(bool RunOnStartup) { 
    Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 
    if (RunOnStartup) { 
     key.SetValue(ProgramTitle, System.Windows.Forms.Application.ExecutablePath.ToString()); 
    } else { 
     key.DeleteValue(ProgramTitle, false); 
    } 
} 

而這個工作,但不正確。它啓動了.exe,但具有與使用缺省「config.xml」所需的新行爲相同的行爲。這顯然是錯誤的。

我沒有設法找出問題所在,所以我嘗試了不同的方式:在Startup文件夾中創建快捷方式。不能出錯我想,我的意思是,這只是一個快捷方式吧?

我用這個代碼:

private void RunOnStartup(bool RunOnStartup) { 
    string startup = Environment.GetFolderPath(Environment.SpecialFolder.Startup) + "\\"+ProgramTitle+".url"; 
    if (RunOnStartup) { 
     using (StreamWriter writer = new StreamWriter(startup)) { 
      string app = System.Reflection.Assembly.GetExecutingAssembly().Location; 
      writer.WriteLine("[InternetShortcut]"); 
      writer.WriteLine("URL=file:///" + app); 
      writer.WriteLine("IconIndex=0"); 
      string icon = app.Replace('\\', '/'); 
      writer.WriteLine("IconFile=" + icon); 
      writer.Flush(); 
     } 
    } else { 
     if (File.Exists(startup)) { 
      File.Delete(startup); 
     } 
    } 
} 

而且這個工作中,也開始了,但具有相同的行爲。

所以我的問題是,有沒有人知道這是怎麼發生的?任何幫助深表感謝!

感謝

+0

「它開始的.exe文件,但具有相同的行爲,因爲它是一個新的使用默認的'config.xml',這顯然是錯誤的。「這根本不明顯,因爲我們不知道你的應用程序應該做什麼,並且影響各種config.xml文件應該對它有什麼影響。 – 2010-05-25 19:55:55

+0

它只是爲它的值讀出一個.xml文件,除此之外沒有別的,所以不要認爲它會干擾。 – FrieK 2010-05-25 20:58:44

回答

2

我懷疑你的應用程序被從目錄中的可執行文件是在不同的工作目錄啓動(通過看我自己的進程列表,他們有用戶作爲其工作目錄配置文件),這就是爲什麼你的config.xml沒有找到。但是,我有快捷方式的應用程序(實際快捷方式,即.lnk文件,而不是Internet快捷方式,即.url文件,就像您嘗試執行的操作)將其工作目錄設置爲快捷方式中指定的目錄。

要輕鬆創建一個shell鏈接(.lnk),您可以嘗試使用由shell32.dll公開的COM接口和類,特別是ShellLinkObject和ShellLinkObjectClass。確保正確設置WorkingDirectory屬性!

或者,更改程序以使其在啓動時根據可執行文件路徑更改其工作目錄。

+0

感謝您的回覆,我一直在嘗試創建墨跡文件,但是我發現每個示例都會給出錯誤。當我手動製作墨跡文件(空白)然後運行代碼時,它不會給出任何錯誤,但墨跡也沒有填充數據。 但是,對於WorkingDir與ExecutedPath不同,你究竟意味着什麼?它有什麼不同? – FrieK 2010-05-25 20:56:33

0

非常感謝FrancisGagné!

我已經成功地創建一個工作.LNK,這一切現在工程:)

代碼:

public static void CreateShortcut(string Filename, string InkLocation, string Description) { 
      string TargetDirectory = ""; 
      string[] splitted = Filename.Split('\\'); 
      for (int i = 0; i < splitted.Length - 1; i++) { 
       TargetDirectory += "\\" + splitted[i]; 
      } 
      TargetDirectory = TargetDirectory.Substring(1); 
      WshShellClass wsh_Shell = new WshShellClass(); 
      IWshShortcut myshorcut = wsh_Shell.CreateShortcut(InkLocation) as IWshShortcut; 
      myshorcut.TargetPath = Filename; 
      myshorcut.Description = Description; 
      myshorcut.WorkingDirectory = TargetDirectory; 
      myshorcut.Save(); 
     }