2013-10-31 70 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 =任何必要的命令行參數爲您的應用

相關問題