备用标题:打开控制时自动运行THINC应用程序(仅在OSP NC系统启动后运行)
我正在编写OSP-P300控件(运行WinXP)的应用程序,并希望它在控件启动/打开时自动启动。我尝试在启动文件夹中使用快捷方式,但这会导致问题。
当应用程序在NC软件启动之前运行时,我的THINC API函数出错。 (该API尚不可用)
我知道“Okuma THINC Startup Service”程序,让它在我的控制下运行。手动配置时,此方法会处理问题并在适当的时间加载我的应用程序。
我的问题是:在安装过程中,有没有办法以编程方式将我的应用程序添加到启动服务?
是的,用户仍然可以手动执行此操作,但默认情况下选中的安装期间的复选框选项会更加简单。
是否可以像添加一些注册表项一样简单?
答案 0 :(得分:2)
使用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
答案 1 :(得分:1)
为THINC启动服务(TSS)实际添加启动项以处理的说明:
通过TSS启动应用程序由注册表控制,在以下密钥中:
<强> “HKEY_LOCAL_MACHINE \ SOFTWARE \ OAC \启动”强>
要“注册”要由TSS处理的应用程序,请在“启动”下创建一个子键, 为您的应用命名:
<强> “HKEY_LOCAL_MACHINE \ SOFTWARE \ OAC \启动\ ScottsApp”强>
然后应该为ScottsApp分配以下值: NAME
FILE
TYPE
ENABLED
LAUNCH
WAIT
DELAY
ARGUMENT
NAME =应用程序的“显示名称”(如果是进程)或服务名称(如果是Windows服务)
FILE =应用程序可执行程序集的完整路径,包括可执行文件名。如果TYPE值为“SERVICE”,则内部忽略此值,因为TSS将使用NAME值启动指定的Windows服务
TYPE =“服务”或“处理”
ENABLED = TRUE或FALSE(布尔值)。允许启用或禁用启动项,而无需从TSS列表中完全删除
LAUNCH =“ONCE”或“MONITOR”如果“ONCE”,则应用程序启动一次;如果“MONITOR”,则应用程序保持活动状态 - 如果用户关闭它,它将由TSS重新启动
WAIT = TRUE或FALSE(布尔值)如果为FALSE,则在启动时启动TSS后,应用程序将立即启动。如果为TRUE,则只有在TSS检测到Okuma NC控制软件已完全启动且THINC API可用后,才会启动应用程序。
DELAY =整数值;表示在启动应用程序之前,TSI在满足WAIT条件之后应等待的毫秒数。例如,如果您想再等待10秒钟,请将此值设置为10000
ARGUMENT =您的应用程序所需的任何命令行参数