2013-06-23 25 views
1

我在這裏和vb.net都很新,而且我被困在某些我覺得應該很容易解決的東西上。我設置我的程序讓用戶決定他或她是否想讓程序在Windows啓動時運行。它實際上工作正常,因爲它將註冊表值分配給CurrentUser而不是本地計算機,因爲管理權限需要被繞過。但是,當我重新啓動計算機時,程序正常運行,但它不會讀取與程序位於同一文件夾中的我的訪問數據庫;它會嘗試從Windows \ System32讀取數據庫。當程序運行在vb.net啓動時讀取數據庫的一個問題

有沒有辦法強制它從可執行文件路徑而不是System32讀取?

這裏是我的簡單的代碼:

Private Sub startup() 

     If cbStartup.Checked = True Then 

      My.Computer.Registry.CurrentUser.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("CurrentVersion").OpenSubKey("Run", True).SetValue("CC_List", System.Windows.Forms.Application.ExecutablePath) 

     ElseIf cbStartup.Checked = False Then 

      My.Computer.Registry.CurrentUser.OpenSubKey("Software").OpenSubKey("Microsoft").OpenSubKey("Windows").OpenSubKey("CurrentVersion").OpenSubKey("Run", True).DeleteValue("CC_List", False) 

     End If 

    End Sub 
+0

「在Windows啓動時運行」是指「在任何人登錄之前」?當您設置該值時,它將被設置在屬於登錄用戶的空間中。但是如果你試圖在沒有人登錄時運行它,我不確定currentuser是否有價值 - 我敢肯定它不會和上次登錄的用戶相同。你可能有更多的運氣審查/張貼打開數據庫的代碼 - 看看你是否可以在那裏獲取System.Windows.Forms.Application.ExecutablePath。 – GregHNZ

+0

感謝您的回覆。但是,「System.Windows.Forms.Application.ExecutablePath」在最後的「IF」語句的第一部分中(是您的意思?)。 :)它有和沒有登錄到用戶帳戶這個錯誤。我已經在兩種場景中嘗試過了。該程序啓動正常。這種情況是,它已經被用戶設置爲在Windows加載時自動啓動。 CurrentUser確實有一個值集,否則程序不會自動加載,是否正確?當我添加它時,我也測試了它的價值。 –

+0

是不是夠用Application.StartupPath? – matzone

回答

0

所以,當O/S啓動程序的當前目錄%windir%\System32

您需要可以調整現有的所有路徑明確的相對是Application.ExecutablePath,或把

My.Computer.FileSystem.CurrentDirectory = My.Application.Info.DirectoryPath 

在程序的開始(這是ChDir ...現代版)。

+0

這樣做了。謝謝馬克。 :) 並感謝其他人的幫助。 對於我使用的記錄: My.Computer.FileSystem.CurrentDirectory = My.Application.Info.DirectoryPath –

+0

@JaredD。 ..你必須接受這個作爲答案..使綠色檢查downvote標誌.. – matzone

+0

我的不好,是在倉促。完成。 –