2012-11-05 71 views
3

我正在使用註冊表項將我的應用程序設置爲在Windows啓動時加載(用戶登錄後)。 我的代碼:在啓動時啓動應用程序,使用錯誤的路徑加載

RegistryKey RegKey = Registry.LocalMachine; 
RegKey = RegKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", true); 
RegKey.SetValue("AppName", "\"" + @"C:\Users\Name\Desktop" + "\""); 
RegKey.Close(); 
與此代碼

因此,在啓動我的應用程序加載,但是工作目錄是

C:\ Windows \ System32下

有誰知道爲什麼嗎?

這對我不起作用,因爲該程序需要與該目錄相同的目錄中的幾個文件才能運行。如果程序加載到我選擇的目錄(「C:\ Users \ Name \ Desktop」),那麼問題就不存在了。

任何人有任何建議嗎?

回答

3

Directory.SetCurrentDirectory()可用於設置應用程序啓動時的工作目錄。可以使用Application.ExecutablePath來檢索EXE路徑。

把它們放在一起:

var fi = new FileInfo(Application.ExecutablePath); 
Directory.SetCurrentDirectory(fi.DirectoryName); 
+0

嗨,請檢查我的答案。這是你的意思嗎 ?我對你的意思有點困惑,但你的想法給了我讀取註冊表以獲取目錄路徑並將其設置爲當前路徑的想法。 謝謝(: –

+0

我認爲使用Application.ExecutablePath比從註冊表中獲取值更清潔:P –

+0

讓我檢查是否也可以工作 –

-1

我已經想通了如何完成這樣的把戲。 當您的應用程序啓動時,請再次閱讀註冊表以獲取您的應用程序的啓動路徑(您想要的那個)。 例如:Appl1的啓動路徑爲「C:\ Users \ Name \ Desktop \ App1.exe」。

一旦您讀取該路徑的註冊表,將其設置爲當前目錄。 事情是這樣的:

 RegistryKey RegKey = Registry.LocalMachine; 
     RegKey = RegKey.OpenSubKey(@"SOFTWARE\Microsoft\Windows\CurrentVersion\Run", false); 
     string Path = RegKey.GetValue("App1.exe").ToString(); 
     Path = Path.Replace(@"\App1.exe"", ""); // Now it's a valid directory. 
     Directory.SetCurrentDirectory(Path); 

這爲我工作,但如果任何人有一個更好的方法,我很願意聽到他們的聲音。

+0

爲什麼回到註冊表中而不是在剛剛設置當前目錄的入口點添加一行,不是很乾淨並且容易出現問題。 – Wobbles

相關問題