JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 程式分享區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [工具]簡易 Windows 服務 (Service) 控制器
zanta





發文: 78
積分: 4
於 2004-05-11 16:32 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
最初的構想是,因為工作需要必須使用 IIS、MySQL、MS SQL Server、Tomcat 等等的應用程式
但若開機時將上述服務全部一古腦兒載入的話,我的電腦大概光開機就可以讓我泡杯茶,更別提當程式全部開始跑時的 loading 會有多重... Dead

話雖如此,我也不是每一次開電腦都一定會使用到全部的服務,一直手動去控制台切換好像又有點累
有鑑於此,這個 for 我個人使用的簡易服務控制器就這樣誕生了~

這個程式的想法很單純,就只是以 java 去呼叫 Windows 的 dos command 來達成目的
比如我現在需要用到 MySQL,我就以這個程式啟用 MySQL 的 service (net.exe start MySql),
用完就再執行程式把它停掉 (net.exe stop MySql)
也因此只能在 MS Windows 2000 以後的環境中使用 (其他平台的朋友抱歉了,畢竟這個程式只是平常自用的 Tongue)

程式的運作大致說明如下,其餘請看附圖。

1) 選單有兩層,第一層顯示共可控制哪些 service,選完之後會出現第二層選單,就是選擇要啟用或是停用。

2) 輸入選擇時若輸入 0,則程式跳出。輸入非數字則進入無窮迴圈強迫輸入正確數字。

3) 要新增 service 的話只要修改程式中的 svcArray 這個二維陣列就可以了,語法是 "畫面顯示名稱", "服務名稱",詳情請看程式碼就知道了~

ServiceControl.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
 * Windows service controller (Java Version)
 * @author: Zanta
 * @version: 2004.05.11
 */
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class ServiceControl
{
    public static void main(String[] args)
    {
        // 此二維陣列定義各項服務的顯示名稱與實際名稱
        final String[][] svcArray = {
            {"Internet Information Service (IIS)", "World Wide Web Publishing"},
            {"Apache Tomcat 4.1", "Apache Tomcat 4.1"},
            {"Microsoft SQL Server 2000 Desktop Engine (MSDE)", "MSSQLSERVER"},
            {"MySQL", "MySql"},
            {"Microsoft FTP Publishing Service", "FTP Publishing"}
        };
        
        final String ptnMenu = "[0-" + svcArray.length + "]{1}"; //判斷何種服務
        BufferedReader reader = null;
        String input = null;
                
        try
        {           
            while (true)
            {
                System.out.println("-----------------------------------------------------------");
                for (int i=0; i<svcArray.length; i++)
                {
                    System.out.println("【" + (i+1) + "】" + svcArray[i][0]);
                }
                System.out.println("-----------------------------------------------------------\n");
 
                do
                {
                    System.out.print("★ 請輸入選擇 [1-" + svcArray.length + ", 0 for exit]:");
                    reader = new BufferedReader(new InputStreamReader(System.in));
                    input = reader.readLine().trim();
                    
                    if (input.equals("0")) System.exit(-1); //輸入 0 則離開程式
                }
                while (!input.matches(ptnMenu));
 
                int choice1 = Integer.parseInt(input);
                System.out.println("\n\t※ 您選擇了:" + svcArray[ (choice1-1) ][0] + "\n");              
                System.out.println("------------------------");
                System.out.println("【1】啟用 (Enable)\n【2】停用 (Disable)");
                System.out.println("------------------------\n");
 
                do
                {
                    System.out.print("★ 請輸入選擇 [1-2, 0 for exit]:");
                    reader = new BufferedReader(new InputStreamReader(System.in));
                    input = reader.readLine().trim();
                    
                    if (input.equals("0")) System.exit(-1); //輸入 0 則離開程式
                }
                while (!input.matches("[0-2]{1}")); //判斷啟用或停用
                
                String choice2 = (Integer.parseInt(input) == 1) ? "start" : "stop";
                String displayChoice = (choice2.equals("start")) ? "啟用" : "停用";
                
                String[] command = { "net.exe", choice2, svcArray[ (choice1-1) ][1] };   //組成 DOS 命令
                
                Runtime rt = Runtime.getRuntime();
                Process p = rt.exec(command); //the output goes into process obj
                reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
 
                String result;
                System.out.println("\n\t※ 正在" + displayChoice + " " + command[2] + " 服務...\n");
                
                //getting the result of dos command
                while ((result = reader.readLine()) != null)
                {
                    System.out.println(result);
                }
                reader.close();
            }            
        }
        catch (IOException e)
        {
            System.out.println("IOException happened!\n" + e.getMessage());
        }
    }
}


當然,您也可以用 JSmooth 之類的程式將它轉成 .exe 執行檔,這樣用起來會更方便 (我自己就是這樣在用的 Cool)


zanta edited on 2004-05-11 17:23
reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
7219 [工具]簡易 Windows 服務 (Service) 控制器 zanta 4478 2004-05-11 16:32
5123 Re:[工具]簡易 Windows 服務 (Service) 控制器 iamevic 92 2004-05-14 22:44
5359 Re:[工具]簡易 Windows 服務 (Service) 控制器 BruceHsu 116 2004-05-15 18:07
» JWorld@TW »  Java 程式分享區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8