用.Net Compact Framework 1.1開發時開外部程式

之前有學弟為了在一台有Win CE環境的PDA上開發應用程式傷腦筋

原因是Visual Studio 2005提供.Net Compact Framework 2.0 無法發佈在比較舊版的Win CE上,

所以就使用.Net Compact Framework 1.1在開發,然後就出現了一個問題,

要呼叫外部程式的話,去MSDN找現有函式只有2.0的才有,

1.1的就要用我下面說的東西了~

PS.我在Google上找 VB 範例,能直接用不會有錯的都不在前面的搜尋結果,讓我花了不少功夫~

開發環境

  • Microsoft Visual Studio 2005
  • 語言:VB

程式功能

  • 在.Net Compact Framework 1.1的環境下,使用VB程式呼叫外部的程式
  • 等外部程式結束後,才繼續往下一行程式執行

開發要點

開一個模組,來放下面的程式

Module MyProcessCreater



 Declare Function CreateProcess Lib "CoreDll.dll" (ByVal imageName As String, ByVal cmdLine As String, ByVal lpProcessAttributes As IntPtr, ByVal lpThreadAttributes As IntPtr, ByVal boolInheritHandles As Int32, ByVal dwCreationFlags As Int32, ByVal lpEnvironment As IntPtr, ByVal lpszCurrentDir As IntPtr, ByVal si As Byte(), ByVal pi As ProcessInfo) As Integer



 Declare Function WaitForSingleObject Lib "CoreDll.dll" (ByVal Handle As IntPtr, ByVal Wait As Int32) As Int32



 Declare Function GetLastError Lib "CoreDll.dll" () As Int32



 Declare Function CloseHandle Lib "CoreDll.dll" (ByVal Handle As IntPtr) As Int32





 Public Class ProcessInfo

     Public hProcess As IntPtr

     Public hThread As IntPtr

     Public ProcessId As Int32

     Public ThreadId As Int32

 End Class 'ProcessInfo





 Public Function CreateProcess(ByVal ExeName As String, ByVal CmdLine As String, ByVal pi As ProcessInfo) As Boolean

     Dim INFINITE As Int32

     INFINITE = &HFFFFFFFF



     Dim WAIT_OBJECT_0 As Int32 = 0

     Dim result As Int32



     If pi Is Nothing Then

         pi = New ProcessInfo

     End If

     Dim si(128) As Byte



     result = CreateProcess(ExeName, CmdLine, IntPtr.Zero, IntPtr.Zero, 0, 0, IntPtr.Zero, IntPtr.Zero, si, pi) '呼叫外部程式

     If 0 = result Then

         Return False

     End If

     result = WaitForSingleObject(pi.hProcess, INFINITE) '等外部程式結束

     CloseHandle(pi.hThread)

     CloseHandle(pi.hProcess)

     If WAIT_OBJECT_0 <> result Then

         Return False

     End If

     Return True

 End Function



End Module 

然後在要呼叫的地方加入以下程式

CreateProcess("要呼叫的程式路徑", "", Nothing)

第一個參數:"要呼叫的程式路徑" 如"\Windows\iexplore.exe"

第二個參數:是外部程式用的參數

第三個參數:我也不清處怎麼用

參考資料

'方法1
returnID = Shell("D:\run.txt", vbNormalFocus)

'方法2
System.Diagnostics.Process.Start ("D:\run.txt")

'方法3
Dim myProcess As Process = System.Diagnostics.Process.Start
("D:\run.txt")
MessageBox.Show(myProcess.ProcessName)

'方法4
Dim psInfo As New _
System.Diagnostics.ProcessStartInfo _
("D:\run.txt")
psInfo.WindowStyle = _
System.Diagnostics.ProcessWindowStyle.Normal
Dim myProcess As Process = _
System.Diagnostics.Process.Start(psInfo)

'方法5
Dim myProcess As System.Diagnostics.Process = _
new System.Diagnostics.Process()
myProcess.StartInfo.FileName = _
"D:\run.txt"
myProcess.StartInfo.WindowStyle = _
System.Diagnostics.ProcessWindowStyle.Normal
myProcess.Start

安裝IBM BDD開發環境

我不是IBM官方人員,所以只能從"多"次失敗經驗中,找出結果~

目前本篇還在修訂中~

歡迎有興趣的人可以一起討論。

BDD簡介

BDD(Business Driven Development)是IBM提出的一套為SOA系統而定的開發流程

所有工具中,與實作有直接關聯的包括

  • WBM(WebSphere Business Modeler)
  • RSA(Rational Software Architect)
  • WID(WebSphere Integration Developer)

PS. 其實還有RAD,但RSA已包含RAD的功能,所以不再安裝RAD

安裝重點

我以我手頭拿到的版本為例 (IBM的東西,版本是重點)

我現在手頭有

  • WBM 6.0.1 Advance
  • RSA 6.0
  • WID 6.0.1

步驟

  • 先安裝RSA:因為它是6.0,其他兩個是6.0.1,所以要先安裝它,路徑盡量短,而且不要有空白(這是IBM工具安裝原則)
  • 升級RSA到6.0.1.1:如果已下載更新檔,可開啟Rational Product Updater→喜好設定→更新網站,然後找到你下載的更新描述檔,會比較快完成,但還是要連上網路唷
  • 完成後請確定WAS6.0測試環境是否能啟動,不能啟動就是安裝失敗,有種原因可能是安裝來源檔有問題
  • PS(先不要上fix,我目前看到已經出到fix003,但上fix對WID的安裝可能會有影響)
  • 安裝WID:這裡是重點,路徑不可與RSA重覆(預設是相同的路徑)
  • 更新WID到6.0.1.2
  • 完成後請確定WPS6.0測試環境是否能啟動,不能啟動就是安裝失敗,有種原因可能是安裝來源檔有問題
  • 安裝WBM

如果你想要直接用RSA開發WBM的部份,按照Information center中描述我沒辦法用,但我找出了其他方式

以下是方法

  • 開啟WID或RSA
  • 按一下說明 > 軟體更新 > 搜尋並安裝 此時會開啟「安裝」精靈。
  • 選取搜尋要安裝的新功能,然後按下一步。
  • 在「更新要造訪的站台」頁面,按一下新的本端站台。 此時會開啟「瀏覽資料夾」視窗。
  • 在「瀏覽資料夾」視窗中,找到你安裝WBM的路徑
  • 選擇其中的eclipse資料夾
  • 選取您剛才新增的站台,然後按下一步。
  • 在「搜尋結果」頁面,選取跟Modeler相關的功能(如果有衝突的部份就不要選)。
  • 按下一步。
  • 在「功能授權」頁面,閱讀您要安裝之每個功能的授權合約。讀完後按一下我接受授權合約中的條款以接受合約,然後按下一步。
  • 在「安裝位置」頁面,針對您要安裝的每個功能選取一個資料夾作為目標站台。 建議您建立一個新資料夾來存放 WebSphere Integration Developer 功能。
  • 按一下新增站台。 此時會開啟「瀏覽資料夾」視窗。
  • 瀏覽至安裝 WebSphere Integration Developer 的資料夾,然後按一下新增資料夾。
  • 建立新資料夾後,將其名稱變更為 modeler。
  • 請確定已選取新資料夾,然後按一下確定返回精靈。 新資料夾會顯示為可用的站台清單中的一個選項。
  • 為要安裝的功能清單中的每個功能指定新站台後,按一下完成。
  • 註: 您必須分別指定每個功能的目的地,方法是按一下該功能,然後指定目的地站台。
  • 安裝期間會開啟「Jar 驗證」視窗。按一下安裝以繼續安裝未經數位簽章的功能。
  • 當詢問您是否想要重新啟動工作台以讓變更生效時,請按一下是。

參考資料

這裡是關於技術的手札~

也歡迎大家到

倫與貓的足跡



到噗浪來

關心一下我唷!
by 倫
 
Copyright 2009 倫倫3號Beta-Log All rights reserved.
Blogger Templates created by Deluxe Templates
Wordpress Theme by EZwpthemes