2013-06-23 19 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

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