2013-10-31 71 views
1

备选标题:自动运行THINC应用程序时控制已打开(仅运行后OSP数控系统启动)在启动时自动启动应用程序 - 等待API可用

我写的OSP-应用P300控制(运行WinXP)并希望在控制启动/打开时自动启动。我已经尝试在启动文件夹中使用快捷方式,但这是一个问题。

当应用程序在NC软件完成启动之前运行时,我从我的THINC API函数中收到错误。 (该API尚不可用)

我知道“Okuma THINC启动服务”程序,并让它在我的控制下运行。手动配置时,此方法会在适当的时候处理问题并加载我的应用程序。

我的问题是:有没有办法在安装过程中以编程方式将我的应用程序添加到启动服务?

是的,用户仍然可以手动执行此操作,但安装过程中默认选中的复选框选项将会非常简单。

它可以像添加一些注册表键一样简单吗?

回答

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

说明务实添加启动项目为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 =完整路径,包括可执行文件名,到您的应用程序的可执行文件embly。这是内部忽略,如果该类型值是“服务”,作为TSS将使用此名称值开始指定的Windows服务

TYPE =“服务”或“过程”

启用 = TRUE或FALSE(布尔)。允许启用或禁用的启动项目,而不从TSS的名单被删除完全

LAUNCH =“ONCE”或“MONITOR”如果“ONCE”,那么应用程序启动一次;如果“MONITOR”,那么应用程序保持活动状态 - 如果用户关闭它,它将由TSS

等待 = TRUE或FALSE(布尔)如果为FALSE,那么应用程序将启动重新推出只要TSS在启动时启动。如果为TRUE,则应用程序将在TSS检测到Okuma NC控制软件已完全启动并且THINC API可用后才启动。

DELAY =整数值;表示在启动应用程序之前,等待条件满足之后,TSS应该等待的毫秒数。举例来说,如果你想等待一个额外的10秒,这个值设置为10000

ARGUMENT =任何必要的命令行参数为您的应用

相关问题