新聞| | PChome| 登入
2007-05-26 11:34:43 | 人氣638| 回應0 | 上一篇 | 下一篇
推薦 0 收藏 0 轉貼0 訂閱站台

(VB2005) Shell 如何執行帶有參數指令的執行檔

在VB6 以下指令是OK 的,可正常開啟執行程式 

       MyShellData = "C:\F4G\BIN\F4EDVPDE.EXE /LC /P"
         ProcID = Shell(MyShellData, AppWinStyle.NormalFocus)

在VB2005 使用偵錯模式運行,執行也正常

可是 在發佈 之後執行程式卻出現

"您的應用程式發生未處理的例外狀況.如果您按一下 [繼續]......................找不到檔案"

  的異常訊息

請問 在 VB2005 要怎樣  執行帶有參數指令的執行檔 ?

 

您好:
建議您改用
Process.Start 方法 搭配 ProcessStartInfo 建構函式 來執行,並加入 Try ... Catch 來判斷問題發生的原因:
使用範例

' 匯入命名空間。
Imports System.Diagnostics
'方法 1:
Process.Start("C:\F4G\BIN\F4EDVPDE.EXE", "/LC /P")

Dim p As New Process
' 方法 2:
Dim pi1 As New Diagnostics.ProcessStartInfo( _
  "C:\F4G\BIN\F4EDVPDE.EXE", "/LC /P")
p.StartInfo = pi1
p.Start()

' 方法 3:
Dim pi2 As New Diagnostics.ProcessStartInfo( _
  "C:\F4G\BIN\F4EDVPDE.EXE")
pi2.Arguments = "/LC /P"
p.StartInfo = pi2
p.Start()



 


卓立民 (Alex Chuo)●台北麵攤, 營養補給站, 吃飽了再上http://blog.xuite.net/alwaysfuturevision/liminzhang

 

通常這是程式設計師的責任,在 VB6 也是這樣,只是你沒注意過。

你用命令提示字元跑看看,會有相同的結果。

一般來說,程式預設安裝在:

C:\Program Files 下,所以你的字串可能變成:

MyShellData = "C:\Program Files\projname\bin\f4edvpde.exe /LC / P"

對 Windows 來說,他會認為你要執行的是

C:\Program.exe、C:\Program.bat、... 等以 Program 為名的可執行檔。

有沒有解決方案?有。從 Windows 95 年代就開始有人問,這個是超過 10 年的 FAQ 。

MyShellData = """C:\Program Files\projname\bin\f4edvpde.exe"" /LC / P"

如同在命令提示字元下:

"C:\Program Files\projname\bin\f4edvpde.exe" /LC / P

所以小朱會告訴你,就是找不到檔案。的確,C:\ 下面沒有叫 Program 的可執行檔。

所以卓老大會叫你用 Process.Start ,一方面這個比較好用,一方面傳回來的 Process 個體可以直接運用,不用在自己把 ProcId 轉成 Process 個體。

在 .Net 下已經有 Process 類別,用這個對於後續操控會更有彈性。我也建議用這個。


T.L. Cheng


 

這就是我覺得不解的部分

該應用程式安裝目錄就是 C:\F4G\bin\ 底下 ,路徑正確

在 Windows XP 下  開始 => 執行  直接輸入  "C:\F4G\bin\f4edvpde.exe  /LC / P"  程式也正常開啟

當然 我也有用 章大師 的建議 使用  Process

說也奇怪 在偵錯模式運行是正常的

可是在程式發佈後,安裝後執行便失敗

使用  Try Catch  抓出之錯誤訊息如下

System.ComponentModel.Win32Exception: 參數錯誤。
   於 System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
   於 System.Diagnostics.Process.Start()
   於 WindowsApplication1.Form1.Button1_Click(Object sender, EventArgs e)

 

 

你的檔案字串如何組的?

一般來說,在開發環境下,執行檔是在

projectPath\bin\debug\app.exe

發布後,通常是

setupPath\app.exe

前面討論的 C:\Program Files 是針對 projectPath / setupPath 的差異

並未針對原先有 bin\debug 或 bin\release 等路徑差異做討論。


T.L. Cheng


感謝各位大師的指點

 

最後 我加上這一段

pi2.WorkingDirectory = "C:\F4G\BIN"

問題就解決了

 

 

' 方法 3:
Dim pi2 As New Diagnostics.ProcessStartInfo( _
  "C:\F4G\BIN\F4EDVPDE.EXE")

pi2.WorkingDirectory = "C:\F4G\BIN"
pi2.Arguments = "/LC /P"
p.StartInfo = pi2
p.Start()

 


 

台長: Kenny
人氣(638) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 教育學習(進修、留學、學術研究、教育概況) | 個人分類: 程式設計 |
此分類下一篇:VB如何下Cmd的指令??
此分類上一篇:On Error 陳述式

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文