台灣最大程式設計社群網站
線上人數
890
 
會員總數:245228
討論主題:189098
歡迎您免費加入會員
討論區列表 >> VB.NET >> Shell完一段命令,程式會自動停止
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
Shell完一段命令,程式會自動停止
價值 : 100 QP  點閱數:167 回應數:12

樓主

林廷恩
門外漢
0 2
36 5
發送站內信

當我Shell("taskkill /f /im abc.bat")
如果abc.bat裡任何指令有回傳錯誤
(例如taskkill /f /im 123.exe 但123.exe不存在)
就會導致我的程式直接結束沒有返回任何錯誤
用TryCatch也沒用
用Proccess也一樣
請問該如何解決?

搜尋相關Tags的文章: [ Shell ] , [ cmd ] ,
本篇文章發表於2019-12-01 11:54
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
作者回應

林廷恩
檢舉此回應
更正 第一行是: Shell("abc.bat") 或是 Shell("cmd /c abc.bat")
本篇文章回覆於2019-12-01 11:56
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

P陳
檢舉此回應
您的問題要在 Bat 中處理
請參考
Dos bat

中間有一段是 IF Exist %1 判斷檔案是否存在
本篇文章回覆於2019-12-01 17:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

P陳
檢舉此回應
然後幾乎所有的動作在 VB.NET 中都可以作到了,您可以試看看
本篇文章回覆於2019-12-01 17:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

P陳
檢舉此回應
然後幾乎所有的動作在 VB.NET 中都可以作到了,您可以試看看
就不要再去呼叫 BAT 了,直接在VB.NET 中的程式中作即可
本篇文章回覆於2019-12-01 17:58
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

林廷恩
檢舉此回應
123.exe是指一個運行中的進程,不能用IF Exist %1判斷是否執行中
平常用bat雖然會出現不存在此進程
但仍會繼續執行下去
但用VB.net的Shell就會執行到一半我的程式自己關掉
也沒有跳出錯誤訊息
本篇文章回覆於2019-12-01 18:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

P陳
檢舉此回應
但ABC.bat 可以下 if exist

指令如下
if not exist 123.exe goto next1
kill 123.exe
next1:

但用VB.net的Shell就會執行到一半我的程式自己關掉
也沒有跳出錯誤訊息 <--- 要跳出錯誤訊息可以在 kill 123.exe 後加 PAUSE 就可看到了
本篇文章回覆於2019-12-01 21:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

林廷恩
檢舉此回應
你完全誤會了== 123.exe一定是存在的,問題在他有沒有在運行中
如果沒有在運行中taskkill會出錯
而且我說的沒有跳出錯誤訊息是我的VB.net程式不是那個bat
bat的錯誤訊息是正常顯示的
我意思是我程式執行完這行Shell沒進入下一行就莫名終止了
本篇文章回覆於2019-12-01 23:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

P陳
檢舉此回應
那猜不出您的執行順序了
請PO程式及您的執行方式了
本篇文章回覆於2019-12-02 07:50
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

林廷恩
檢舉此回應
abc.bat:
[code]
taskkill /f /im 123.exe
ren 123.exe 124.exe
[/code]

vb.net:
[code]
Shell(abc.bat)
Messagebox.Show("Done")
[/code]

bat第一行雖然會報錯,但是仍會繼續執行第二行且執行成功。
而vb.net的程式執行完第一行沒有任何訊息就直接終止,第二行以後都沒執行。
本篇文章回覆於2019-12-02 18:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
回應

P陳
檢舉此回應
Shell(abc.bat) <---- 要 Shell("Abc.bat") 才對


另建議
taskkill /f /im 123.exe
Pause <---加這一句
ren 123.exe 124.exe

本篇文章回覆於2019-12-02 22:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
回應

P陳
檢舉此回應
taskkill /f /im 123.exe
ren 123.exe 124.exe
Pause <---加這一句 移到這較好
-------------------------------------
另不管有沒有 TaskKill askKill 成功,皆會執行下一句的 Ren 123.exe 124.exe

有加PAUSE 才會看出來<---
本篇文章回覆於2019-12-02 23:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
12樓
回應

Ader Chen
檢舉此回應

好奇, 開了個 WinForm 依樓主描述測試一下,
即使 abc.bat 裡面指令顯示錯誤, 還是會繼續跑完. <-- 與樓主相同.
而 VB.NET 程式也會繼續 Messagebox 及之後的程序, 沒有異常終止. <-- 與樓主不同.
一時想不出為何我這裡運行正常, 樓主卻會在 Shell 之後異常終止,
姑且請試試看:
1. 開一個全新的 WinForm 專案, 最單純的環境跑 Shell 也會異常終止嗎?
2. 以系統管理員身分執行 Visual Studio, 看看狀況有無不同?
3. 檔案總管檢查 abc.bat 的[安全性]權限設定是否正常?
4. 把防毒軟體暫時停用, 看看狀況有無不同?
本篇文章回覆於2019-12-03 00:09
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.