iT邦幫忙

DAY 13
2

看範例學C#系列 第 13

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

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

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

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會看到如下畫面

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

全系列文章列表


上一篇
看範例學C#-12 程式開頭動畫
下一篇
看範例學C#-14 偵測組合鍵
系列文
看範例學C#30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
ftair
iT邦新手 5 級 ‧ 2011-10-27 14:55:47

請問一下thc大大,如何讓B程式執行完回傳值給A,而A又該如何接收和判斷呢? 謝謝

thc iT邦研究生 5 級 ‧ 2011-10-27 15:02:14 檢舉
v60i iT邦新手 4 級 ‧ 2018-06-15 09:28:25 檢舉

大大你好,網頁404了,可否幫忙再發一次這邊連結

0
ftair
iT邦新手 5 級 ‧ 2011-10-27 15:01:46

請問大大,如何讓B程式執行完回傳值給A程式,而A程式該如何接收和判斷呢?謝謝

0
raylu18d
iT邦新手 5 級 ‧ 2012-02-21 10:40:41

不錯的分享,
另外建議在ex13_2 Program.cs加上
檢視原始檔複製到剪貼簿列印關於

&lt;pre class="c" name="code">
if (args.length > 0 || args[0].ToString() == "givememoney") { 
// do smthing. 
} else { 
// alert & exit. 
} 

這樣可避免發生windows的錯誤訊息而達到原本預期的效果。:)

我要留言

立即登入留言