C#和asp.net執行外部EXE程序


這兩天研究下.Net的執行外部EXE程序問題,就是在一個程序里通過按鈕或其他操作運行起來另外一個程序,需要傳入參數,如用戶名、密碼之類(實際上很類似單點登錄,不過要簡單的多的多);總結如下:

1、CS版:WebForm的調用外部程序,很簡單

(1)如果不考慮參數問題,僅僅是執行另外一個程序,用:System.Diagnostics.Process.Start("')即可:

如:System.Diagnostics.Process.Start("D:\\首字母拼音碼.exe", "");

(2)如果需要傳入參數,最好使用ShellExecute:

如:程序1中執行程序2,並將用戶名和密碼傳入程序2

首先,程序1中某個頁面:

添加引用:using System.Runtime.InteropServices;

在按鈕事件的外面添加:

[DllImport("shell32.dll ")]
public static extern int ShellExecute(IntPtr hwnd, StringBuilder lpszOp, StringBuilder lpszFile, StringBuilder lpszParams, StringBuilder lpszDir, int FsShowCmd);

最后,按鈕事件:

private void button3_Click(object sender, EventArgs e)
{

ShellExecute(IntPtr.Zero, new StringBuilder("Open"), new StringBuilder("D:\\首字母拼音碼.exe"), new StringBuilder("用戶名 密碼"), new StringBuilder(""), 1);

}

方法的第三個參數是:外部EXE程序的路徑和名稱;第四個參數是:要傳入的用戶名和密碼,用空格分隔;

其他參數就不細說了,有興趣的自己在網上找找吧。

 

其次:程序2需要接收參數:

Program文件里:

[STAThread]
static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1(args));
}

Form1文件里:

private string _Name = "";
private string _Pwd = "";
public Form1(string[] args)
{
InitializeComponent();
if (args != null && args.Length > 1)
{
_Name = args[0].ToString();
_Pwd = args[1].ToString();
}
}

_Name和_Pwd兩個公用變量就得到了傳送過來的參數。

 

運行程序1,點擊按鈕,即可打開程序2,並得到兩個參數值。

2、BS:WebForm版本執行外部程序,比較要命,因為我們需要在客戶端調用,而按照CS版本寫的話,在VS里可以運行,但是部署到IIS后訪問,就沒有反應了,目前發現的方法是使用腳本來實現:

(1)無參數:程序1中,添加script腳本,

<script>
function exec(command) {

var wsh = new ActiveXObject("WScript.Shell");
if (wsh) {
wsh.Run(command);
}

}
</script>

然后:<input type="button" onclick="exec('D:\\首字母拼音碼.exe')" value="執行EXE" />

(2)有參數:程序1中,

<script>
function exec() {

var temp = document.getElementById('Hidden1');
var path = document.getElementById('Hidden2');
var ShellApp = new ActiveXObject("Shell.Application");
ShellApp.ShellExecute(path.value, temp.value)

}
</script>

說明下:Hidden1和Hidden2是兩個隱藏域,用於存放【用戶名、密碼】和【程序2的地址】

然后:<input type="button" onclick="exec()" value="執行EXE2" />

程序2和CS中的設置一致。

發布后,只要客戶端有程序2,路徑和設置的一致,就可以打開

 

對了,BS版本用該方法有些地方要注意:

首先,瀏覽器要是IE內核

其次,在瀏覽器的“Internet選項”,選擇“安全”,將程序1的網址加入到“可信任站點”

其次,點“自定義級別”,選擇“ActiveX控件和插件”中的“對未標記為可安全執行腳本的ActiveX控件初始化並執行腳本‘,選擇”啟用“(一般是禁用),保存即可

 

3、其他:

其他方法還有很多,不過感覺不大方便,比如修改計算機注冊信息等;需要時再從網上找找吧(不過BS的僅找到這么一個方法,其他的無法再IIS部署后使用,以后有時間再研究吧)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM