遠端以VPN連入公司的windows 2003 server,自動執行一個批次檔如下,請問:
@echo off
cls
echo * * * * * * * * * * * * * * * *
echo * a. A 系 統 *
echo * b. B 系 統 *
echo * q. 離 開 *
echo * * * * * * * * * * * * * * * *
choice /C abq /M "請按鍵(大小寫均可)"
if errorlevel 3 goto option3
if errorlevel 2 goto option2
if errorlevel 1 goto option1
goto End
: option1
a.exe
goto End
: option2
b.exe
goto End
: option3
exit
goto End
: end
c:
cd\temp\test
menu.bat
以前在 DOS 底下,可以使用 CTTY NUL 將 KEYBOARD 轉向 NULL DEVICE
就可以達到這個目的,不過現在 XP 底下已經沒有這玩意了
以下連結是 dos 內部及外部指令與 xp 版本的差異說明
http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/dos_diffs.mspx?mfr=true
symis提到:
端以VPN連入公司的windows 2003 server,自動執行一個批次檔如下,請問:
- 要如何防止user用Ctrl-C或Ctrl-Break去中斷批次檔?
- 還有什麼可以改善的地
提供一個建議方向:
封裝成執行檔。
http://www.f2ko.de/English/b2e/index.php
你可以建立一個捷徑,然後在捷徑中設定,執行此程式的時候要全螢幕執行,這樣就不會被強迫關閉了
start /b x.bat
/b可停用ctrl+c或Ctrl+Break(這個可中斷)
按Ctrl-Break會詢問是否中斷,按y後會出現x:\>但輸入任何指令皆會回答是否中斷的訊息,無法輸入其他指令,在按一次ctrl+Break則繼續原批次檔。
一樣加到群組原則裡的登入/登出就可以執行了
補充說明的.vbs不適用有選項的批次檔,因為會看不到選項也無法選
做法:
建立run.vbs內容為
wshshell.run ("x.bat"),0
將run.vbs加到群組原則登入執行列表中
dream提到:
start /b x.bat
這個我試過,按 Ctrl-C 確實沒有中斷,但是按Ctrl-Break,還是一樣可以中斷。
tombo提到:
但是按Ctrl-Break,還是一樣可以中斷
start /b 的說明確實是可以中斷,不過我使用時會倒是如原先說的那樣,暫停後輸入其他指令都無效。不知你的狀況是不是跟我一樣,
我的批次檔中有 goto 無限迴圈。
寫個程式去呼叫Windows API的shellexec()讓他去呼叫你的shell script在背景執行,下SW_HIDE參數,理論上看不到,焦點不會給你shell的視窗的話,鍵盤碼就不會給你的shell,就應該不會被中斷。
不要花錢買或盜版compiler,使用OpenSource的DevC++就可以。
去找一本Windows API的書,或是去找網頁寫有關shellexec()的教學,我記得include "windows.h"就可以去呼叫shellexec()的函式。