为什么注册表的内的启动项无法启动程序
一个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
把程序集名称改成上面一致,测试一切正常.