文章目錄
- Feedback
- 公告
- 朋友
- 評論熱門排行榜
- 閱讀熱門排行榜
引用 http://www.cnblogs.com/sonicit/archive/2008/04/19/1161256.htmlasp.net中執行exe應用程式,終極解決方案。
Posted on 2008-04-19 16:04 sonicit 閱讀(3320) 評論(5) 編輯 收藏
在asp.net中執行應用程式有兩種方法:1、調用win32函數ShellExecute。2、用.NET Framework中的Process類。下面我分別用這兩種方法執行Windows中的記事本程式notepad.exe。
建立一個ASP.Net頁面Default.aspx,在上面放一個按鈕,進入Default.aspx.cs頁面填寫幕後處理程式。
1、調用win32函數ShellExecute。
添加引用using System.Runtime.InteropServices;
聲明函數:
[DllImport("shell32.dll")]
private static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, Int32 nShowCmd);
在按鈕的單擊事件處理常式中調用前面生明的ShellExecute函數:
ShellExecute(IntPtr.Zero, "open", "c:\\windows\\notepad.exe", null, null, 1);
//檔案名稱可以不加尾碼,如"c:\\windows\\notepad"。
程式完成
2、用.NET Framework中的Process類
添加引用using System.Diagnostics;
在按鈕的單擊事件處理常式中填入以下代碼:
Process process = new Process();
process.StartInfo.FileName = "c:\\windows\\notepad.exe";
//檔案名稱必須加尾碼。
process.Start();
程式完成。
注意:在asp.net2.0中運行以上兩種方法寫的程式都可以得到想要的結果。但是在asp.net1.1或更早的版本卻不能得到想要的結果,開啟工作管理員甚至可以看到進程已經存在(編譯器也沒有報錯),但就是看不到執行效果,這是微軟為了安全原因禁掉了程式的運行,你需要做以下兩步才能正常運行:
1、在案頭按右鍵“我的電腦”,選擇管理,展開“服務和應用程式”節點,選擇“服務”項;從右側的服務列表中找到“IIS Admin”項,右擊滑鼠,選擇“屬性”,在屬性框中開啟“登陸”頁,勾選“本地系統帳戶”下的“允許與案頭互動”項,點擊確定。重新啟動這項服務。
2、開啟目錄“C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG”中的machine.config檔案,找到“processModel”項,原來這項中有一個屬性是userName="machine",將machine改為“system”,儲存檔案,修改完畢。
現在再運行以前的程式可以看到期望的結果。
以上程式在IIS5.0中可正常運行。
以上是從別人的BLOG中轉載的,但是其中有一點沒有說明,在WIN2003系統中,按上面的方法只能
看到進程,無法執行程式,解決方案為:在網站所對應的程式池,點擊屬性->標識,把“網路服務”改成“本地系統”,這樣在ASP.net中調用的EXE是以伺服器本地方法運行。
分類: Asp.net 綠色通道: 好文要頂 關注我 收藏該文與我聯絡
sonicit
關注 - 0
粉絲 - 5 +加關注10 (請您對文章做出評價) « 博主上一篇:FastReport For Delphi7 通用安裝方法
» 博主下一篇:BCB\Delphi ActiveForm發布全攻略 Feedback#1樓
2008-10-29 10:10 by 李彬d[未註冊使用者]你好!看到你的文章很開心,首先要謝謝你.
我按照你的說方法去做了,我的作業系統是2003的,可是我還是只能看到進程,看不到表單,我寫的是VB.EXE程式,在程式裡面再調用EXCEL檔案,當我程式運行時,VB.EXE在我的工作管理器中出現了,EXECL也出現了,可是就是看不到VB表單,有沒有辦法可以看到表單啊?
謝謝你了.
#2樓[樓主]
2008-10-29 11:11 by sonicit VB我倒不太瞭解,至少調用其它的EXE程式沒有問題的。也許是VB的問題,估計我幫不了你。支援(0)反對(0)#3樓
2010-06-03 10:38 by zhujinhu 我按照你的方法試了,調用的exe還是不顯示出來,只有進程,我用的是windows2003,什麼原因支援(0)反對(0)#4樓
2011-03-21 18:37 by invoker707 這個啟動的是伺服器程式還是用戶端程式呢支援(0)反對(0)#5樓
2011-06-15 08:49 by lqlzxl 你好,我也按你的方法試了,我的windows2003系統,調用exe也是現實不出來,只有進程,我啟動的是服務程式。想問一下這是什麼原因呢?支援(0)反對(0) 重新整理評論重新整理頁面返回頂部註冊使用者登入後才能發表評論,請 登入 或 註冊,訪問網站首頁。 部落格園首頁博問新聞快閃記憶體程式員招聘知識庫最新IT新聞:
· 邁阿密加入美國創業人才搶奪
· 3D列印顱骨有望投入臨床治療
· 這是空調遙控器?18000元的女性專用手機來了
· 傳蘋果流音樂服務iRadio或跳票至夏季甚至更晚
· 王垠:談文法
» 更多新聞...最新知識庫文章:· 雲端運算裡AWS和Azure的探究
· SQL Server 高效能寫入的一些總結
· Facebook如何?PB層級資料庫自動化備份
· 原始程式碼控制十誡
· 如何成為強大的程式員?
» 更多知識庫文章... 公告暱稱:sonicit
園齡:5年9個月
粉絲:5
關註:0
+加關注常用連結
朋友
評論熱門排行榜 閱讀熱門排行榜
在asp.net中執行應用程式有兩種方法:1、調用win32函數ShellExecute。2、用.NET Framework中的Process類。下面我分別用這兩種方法執行Windows中的記事本程式notepad.exe。
建立一個ASP.Net頁面Default.aspx,在上面放一個按鈕,進入Default.aspx.cs頁面填寫幕後處理程式。
1、調用win32函數ShellExecute。
添加引用using System.Runtime.InteropServices;
聲明函數:
[DllImport("shell32.dll")]
private static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, Int32 nShowCmd);
在按鈕的單擊事件處理常式中調用前面生明的ShellExecute函數:
ShellExecute(IntPtr.Zero, "open", "c:\\windows\\notepad.exe", null, null, 1);
//檔案名稱可以不加尾碼,如"c:\\windows\\notepad"。
程式完成
2、用.NET Framework中的Process類
添加引用using System.Diagnostics;
在按鈕的單擊事件處理常式中填入以下代碼:
Process process = new Process();
process.StartInfo.FileName = "c:\\windows\\notepad.exe";
//檔案名稱必須加尾碼。
process.Start();
程式完成。
注意:在asp.net2.0中運行以上兩種方法寫的程式都可以得到想要的結果。但是在asp.net1.1或更早的版本卻不能得到想要的結果,開啟工作管理員甚至可以看到進程已經存在(編譯器也沒有報錯),但就是看不到執行效果,這是微軟為了安全原因禁掉了程式的運行,你需要做以下兩步才能正常運行:
1、在案頭按右鍵“我的電腦”,選擇管理,展開“服務和應用程式”節點,選擇“服務”項;從右側的服務列表中找到“IIS Admin”項,右擊滑鼠,選擇“屬性”,在屬性框中開啟“登陸”頁,勾選“本地系統帳戶”下的“允許與案頭互動”項,點擊確定。重新啟動這項服務。
2、開啟目錄“C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\CONFIG”中的machine.config檔案,找到“processModel”項,原來這項中有一個屬性是userName="machine",將machine改為“system”,儲存檔案,修改完畢。
現在再運行以前的程式可以看到期望的結果。
以上程式在IIS5.0中可正常運行。
以上是從別人的BLOG中轉載的,但是其中有一點沒有說明,在WIN2003系統中,按上面的方法只能
看到進程,無法執行程式,解決方案為:在網站所對應的程式池,點擊屬性->標識,把“網路服務”改成“本地系統”,這樣在ASP.net中調用的EXE是以伺服器本地方法運行。