使用 API 磁盘上的启动服务。
这是我用来注册/注销的类。
我从这里得到的 CReg 类:RegistryKeyAccess.vb
导入 Microsoft.Win32
Public Class ThincStartupReg
Public Overloads Shared Sub Register(ApplicationPath As String, ApplicationName As String, AppType As enumAppType, wait As Boolean, LaunchType As enumLaunch)
Try
Dim ObjReg As New CReg
Dim regCreated As Boolean
If ObjReg.ReadValue(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\StartupService\", "State") Then
'Startup Service is installed
If Not ObjReg.ReadValue(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\Startup\" & ApplicationName, "Enabled") Then
'No entry for this program
regCreated = ObjReg.CreateSubKey(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\Startup\" & ApplicationName)
Else
regCreated = True
End If
If regCreated Then
ObjReg.WriteValue(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\Startup\" & ApplicationName,
"Type", "Process")
ObjReg.WriteValue(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\Startup\" & ApplicationName,
"Name", ApplicationName)
ObjReg.WriteValue(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\Startup\" & ApplicationName,
"Enabled", "True")
ObjReg.WriteValue(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\Startup\" & ApplicationName,
"Wait", If(wait, "True", "False"))
ObjReg.WriteValue(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\Startup\" & ApplicationName,
"Type", If(AppType = enumAppType.Process, "Process", "Service"))
ObjReg.WriteValue(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\Startup\" & ApplicationName,
"Launch", If(LaunchType = enumLaunch.LaunchOnce, "Once", "Monitor"))
ObjReg.WriteValue(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\Startup\" & ApplicationName,
"File", ApplicationPath)
End If
End If
Catch ex As Exception
Throw ex
End Try
End Sub
Public Overloads Shared Sub Register(ThisAssembly As System.Reflection.Assembly, ByVal AppType As enumAppType, ByVal Wait As Boolean, ByVal LaunchType As enumLaunch)
Dim AppName = ThisAssembly.FullName.Split(",")(0)
Dim AppPath = ThisAssembly.Location
Register(AppPath, AppName, AppType, Wait, LaunchType)
End Sub
Public Shared Sub UnRegister()
Try
Dim ObjReg As New CReg
Dim AppName = System.Reflection.Assembly.GetExecutingAssembly().FullName.Split(",")(0)
If ObjReg.ReadValue(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\StartupService\", "State") Then
If ObjReg.ReadValue(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\Startup\" & AppName, "Enabled") Then
ObjReg.DeleteSubKey(ObjReg.HKeyLocalMachine, "SOFTWARE\OAC\Startup\" & AppName)
End If
End If
Catch ex As Exception
Throw ex
End Try
End Sub
End Class
如果您不确定安装服务是否会安装,您可以将快捷方式添加到启动文件夹,然后循环直到 OSP 进程开始。
Public Shared Function Wait(Timeout As TimeSpan) As Integer
If File.Exists("C:\OSP-P\OSPMNGCD.CNC") Then
Dim startTime = Now
Dim myProcess As Process() = Process.GetProcessesByName("PNC-P200")
While myProcess.Length = 0
If Now.Subtract(startTime) >= Timeout Then Return -1
myProcess = Process.GetProcessesByName("PNC-P200")
Thread.Sleep(1000)
End While
'OSP Started
Return 1
End If
'Simulation mode (not on a machine)
Return 2
End Function