2013-06-23 3 views
1

Я новичок здесь и vb.net, и я застрял на чем-то, что, по моему мнению, ДОЛЖНО быть простым в разрешении. Я настраиваю свою программу, чтобы позволить пользователю решить, хочет ли он или она запускать программу при запуске Windows. Он действительно работает нормально, поскольку он назначает значение реестра CurrentUser вместо Local Machine из-за того, что права администратора должны быть обойдены. Однако, когда я перезагружаю компьютер, программа появляется, как обычно, но не будет читать мой доступ db, который находится в той же папке, что и программа; он пытается прочитать БД из 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. .. вы должны принять это как ответ .. сделать зеленый чек ниже нижнего знака .. – matzone

+0

Плохо, был в спешке. Готово. –