首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

为什么注册表的内的启动项无法启动程序,该怎么解决

2012-02-21 
为什么注册表的内的启动项无法启动程序一个VB.NET写的程序,在程序启动的时候会在注册表内添加启动项目,在

为什么注册表的内的启动项无法启动程序
一个VB.NET写的程序,在程序启动的时候会在注册表内添加启动项目,在下次启动时,自动启动程序。
在程序中还会判断,程序必要的文件是否存在。
现在问题是,手动启动程序一切正常,但是自动启动程序时,会提示找不到检测的文件,但是这个文件确实时存在的,不知道是什么问题。
向注册表添加启动项:
Private   Sub   AddToRegister()
                '设置项目名称
                Dim   keyName   As   String   =   "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run "
                '设置值名称
                Dim   valueName   As   String   =   "ETLTask "
                '设置值
                Dim   value   As   String   =   Application.StartupPath   &   "\ "   &   Application.ProductName   &   ".exe "
                '检查是否已经添加了启动项
                With   My.Computer.Registry
                        'Dim   startKey   As   Microsoft.Win32.RegistryKey   =   .CurrentUser.CreateSubKey( "SOFTWARE\Microsoft\Windows\CurrentVersion\Run ")
                        Dim   startKey   As   Microsoft.Win32.RegistryKey   =   .LocalMachine.CreateSubKey( "SOFTWARE\Microsoft\Windows\CurrentVersion\Run ")
                        Dim   itemValue   As   String   =   startKey.GetValue(valueName)
                        If   itemValue   =   Nothing   Then
                                '如果未添加启动项,则在注册表中添加
                                Try
                                        .SetValue(keyName,   valueName,   value)
                                Catch   ex   As   Exception
                                        Throw   New   Exception(ex.Message,   ex.InnerException)
                                End   Try
                        Else
                                '如果已经添加启动项
                                '检查程序地址和启动项地址是否相同
                                '不相同则修改地址
                                If   String.Compare(itemValue,   value)   =   0   Then
                                        Exit   Sub


                                Else
                                        Try
                                                .SetValue(keyName,   valueName,   value)
                                        Catch   ex   As   Exception
                                                Throw   New   Exception(ex.Message,   ex.InnerException)
                                        End   Try
                                End   If
                        End   If
                End   With
        End   Sub

启动文件检测:
  Dim   dllFileName   As   String   =   "Microsoft.SQLServer.ManagedDTS.dll "
                Dim   configFileName   As   String   =   Application.ProductName   &   ".exe.config "
                '检查DTS库连接文件是否存在
                If   File.Exists(dllFileName)   =   True   Then
                        '检查程序Config文件是否存在
                        If   File.Exists(configFileName)   =   True   Then
                                Return   True
                        Else
                                m_Logger.AddToLogger( "[ERR]         找不到 "   &   configFileName   &   "文件,请将程序配置文件移动到和程序相同的目录下,程序终止启动 ")
                                m_Logger.AddToLogger( "[LOG]         程序启动失败 ")
                                Return   False
                        End   If
                Else
                        m_Logger.AddToLogger( "[ERR]         找不到 "   &   dllFileName   &   "文件,请将库连接文件移动到和程序相同的目录下,程序终止启动 ")
                        m_Logger.AddToLogger( "[LOG]         程序启动失败 ")


                        Return   False
                End   If

[解决办法]
Using below for your program path...

Process.GetCurrentProcess.MainModule.FileName
[解决办法]
顶!
[解决办法]
楼主经过反复测试:Application.ProductName 是根命名空间:WindowsApplication1

把程序集名称改成上面一致,测试一切正常.

热点排行