启动时自动启动应用程序 - 等待API可用

时间:2013-10-31 12:34:46

标签: registry windows-installer startup okuma

备用标题:打开控制时自动运行THINC应用程序(仅在OSP NC系统启动后运行)

我正在编写OSP-P300控件(运行WinXP)的应用程序,并希望它在控件启动/打开时自动启动。我尝试在启动文件夹中使用快捷方式,但这会导致问题。

当应用程序在NC软件启动之前运行时,我的THINC API函数出错。 (该API尚不可用)

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

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

是的,用户仍然可以手动执行此操作,但默认情况下选中的安装期间的复选框选项会更加简单。

是否可以像添加一些注册表项一样简单?

2 个答案:

答案 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 =您的应用程序所需的任何命令行参数