看範例學C#-13 防止執行檔被單獨執行

  • 13623
  • 0
  • C#
  • 2011-10-07

看範例學C#-13 防止執行檔被單獨執行

這篇的目的是防止別人直接開程式,因為有時候會有這種特別的需求
一定要從程式a才能叫出程式b,就是不要給人直接開啟程式b
要達到這種需求,最簡單的方式是在 程式a 加上 接收參數
而在程式b加上 送出 參數,然後啟動程式a
因為以前在vb6有用過這種方式,所以這次遇到這種需求,
我也就想到用這種方式
 
Visual studio 一次只能有一個方案,一個方案能有很多個專案
這篇範例用了兩個專案檔,要加入第二個專案的方式如下圖
檔案>加入>新增專案

1

因為程式a要呼叫程式b所以我把ex13_2的輸入路徑改成跟ex13_1的路徑一樣
這樣就能直接在同一個目錄下呼叫了

2

ex13_1 程式碼


        //程式A呼叫程式B
        private void button1_Click(object sender, EventArgs e)
        {
            ProcessStartInfo startInfo = new ProcessStartInfo("ex_13_2.exe");//設定執行檔名稱 ex_13_2.exe
            startInfo.UseShellExecute = false;//要加這行才能正常執行
            startInfo.Arguments = "givememoney";//傳入參數
            Process.Start(startInfo);//啟動 startInfo 
        }

ex13_2 Program.cs程式碼,參數在這邊接收


using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace ex_13_2
{
    static class Program
    {
        /// <summary>
        /// 應用程式的主要進入點。
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            //限制需傳參數進來 才啟動
            if (args[0].ToString() == "givememoney")
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
            else
            {
                MessageBox.Show("程式非法啟動","警告");
                Application.Exit();
            } 
        }
    }
}

都編譯好之後,直接執行ex13_2.exe會看到如下畫面

3

 

如果是從ex13_1.exe去呼叫的,當然就會成功了

4

ex13.rar


如有錯誤 歡迎指正