最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#?調(diào)用外部exe的三種方式

 更新時(shí)間:2024年04月09日 09:12:22   作者:bosins  
調(diào)用外部exe是常用的功能,本文主要介紹了C#?調(diào)用外部exe的三種方式,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

當(dāng)我們用 C# 來(lái)開(kāi)發(fā)客戶端程序的時(shí)候,總會(huì)不可避免的需要調(diào)用外部程序或者訪問(wèn)網(wǎng)站

方式一:直接調(diào)用Process類(lèi)來(lái)實(shí)現(xiàn):

using System.Diagnostics;
Process p = Process.Start("program.exe");
p.WaitForExit();//本行代碼不是必須,但是很關(guān)鍵,限制等待外部程序退出后才能往下執(zhí)行

當(dāng)exe程序需要傳遞參數(shù)時(shí):

using System.Diagnostics;
Process p = Process.Start("program.exe 參數(shù)");
p.WaitForExit();//本行代碼不是必須,但是很關(guān)鍵,限制等待外部程序退出后才能往下執(zhí)行

方式二:利用shell32.dll,調(diào)用ShellExecute方法

ShellExecute 方法可以打開(kāi)一個(gè)已注冊(cè)的文件、打開(kāi)一個(gè)目錄、打印一個(gè)文件等等,可以根據(jù)返回值判斷是否調(diào)用成功。函數(shù)如下:

IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, ShowCommands nShowCmd);

其中,各參數(shù)信息如下:

  • hwnd:指定父窗口句柄,未指定時(shí)可以為 null 或者為 0
  • lpOperation:指定操作,值可以為【open】、【print】、【explore】。open:執(zhí)行由 lpFile 參數(shù)指定的程序,或打開(kāi)由lpFile 參數(shù)指定的文件或文件夾;print :打印由 lpFile 參數(shù)指定的文件;explore:瀏覽由lpFile參數(shù)指定的文件夾。當(dāng)參數(shù)設(shè)為 null 時(shí),默認(rèn)為 open。
  • lpFile:指定要打開(kāi)的文件或程序
  • lpParameters:給要打開(kāi)的程序指定參數(shù);如果打開(kāi)的是文件,值為 null
  • lpDirectory:默認(rèn)目錄
  • nShowCmd:打開(kāi)設(shè)置項(xiàng),具體意義如下:
SW_HIDE            = 0;  //隱藏
SW_SHOWNORMAL      = 1;  //用最近的大小和位置顯示, 激活
SW_NORMAL          = 1;  //同 SW_SHOWNORMAL
SW_SHOWMINIMIZED   = 2;  //最小化, 激活
SW_SHOWMAXIMIZED   = 3;  //最大化, 激活
SW_MAXIMIZE        = 3;  //同 SW_SHOWMAXIMIZED
SW_SHOWNOACTIVATE  = 4;  //用最近的大小和位置顯示, 不激活
SW_SHOW            = 5;  //同 SW_SHOWNORMAL
SW_MINIMIZE        = 6;  //最小化, 不激活
SW_SHOWMINNOACTIVE = 7;  //同 SW_MINIMIZE
SW_SHOWNA          = 8;  //同 SW_SHOWNOACTIVATE
SW_RESTORE         = 9;  //同 SW_SHOWNORMAL
SW_SHOWDEFAULT     = 10; //同 SW_SHOWNORMAL
SW_MAX             = 10; //同 SW_SHOWNORMAL

返回值說(shuō)明:返回值大于 32 時(shí),即執(zhí)行成功。執(zhí)行失敗的返回值具體意義如下:

0                      = 0   //內(nèi)存不足
ERROR_FILE_NOT_FOUND   = 2;  //文件名錯(cuò)誤
ERROR_PATH_NOT_FOUND   = 3;  //路徑名錯(cuò)誤
ERROR_BAD_FORMAT       = 11; //EXE 文件無(wú)效
SE_ERR_SHARE           = 26; //發(fā)生共享錯(cuò)誤
SE_ERR_ASSOCINCOMPLETE = 27; //文件名不完全或無(wú)效
SE_ERR_DDETIMEOUT      = 28; //超時(shí)
SE_ERR_DDEFAIL         = 29; //DDE 事務(wù)失敗
SE_ERR_DDEBUSY         = 30; //正在處理其他 DDE 事務(wù)而不能完成該 DDE 事務(wù)
SE_ERR_NOASSOC         = 31; //沒(méi)有相關(guān)聯(lián)的應(yīng)用程序

代碼實(shí)現(xiàn)如下:

// 引入庫(kù)
[DllImport("shell32.dll")]
static extern IntPtr ShellExecute(IntPtr hwnd, string lpOperation, string lpFile, string lpParameters, string lpDirectory, ShowCommands nShowCmd);

// 調(diào)用
string filepath = @"C:\Users\Administrator\Desktop\program.exe";
IntPtr result = ShellExecute(IntPtr.Zero, "open", filepath, "", "", ShowCommands.SW_SHOWNORMAL);

方式三:kernel32.dll,調(diào)用WinExec方法

WinExec方法僅能打開(kāi)本地程序,可以根據(jù)返回值判斷是否調(diào)用成功(<32表示出現(xiàn)錯(cuò)誤)。

UINT WinExec(exePath,ShowCmd)

參數(shù)說(shuō)明:

–xePath:命令行參數(shù)。注意,要用pChar轉(zhuǎn)化一下。
–ShowCmd:外部程序的運(yùn)行方式。其取值如下:
----SW_HIDE 隱藏   
----SW_MAXIMIZE 最大化
----SW_MINIMIZE 最小化,并把Zorder順序在此窗口之后(即窗口下一層)的窗口激活
----SW_RESTORE 激活窗口并還原為初始化大小 SW_SHOW以當(dāng)前大小和狀態(tài)激活窗口
----SW_SHOW 用當(dāng)前的大小和位置顯示一個(gè)窗口,同時(shí)令其進(jìn)入活動(dòng)狀態(tài)
----SW_SHOWDEFAULT 以默認(rèn)方式運(yùn)行
----SW_SHOWMAXIMIZED 激活窗口并最大化
----SW_SHOWMINIMIZED 激活窗口并最小化
----SW_SHOWMINNOACTIVE最小化但不改變當(dāng)前激活的窗口
----SW_SHOWNA 以當(dāng)前狀態(tài)顯示窗口但不改變當(dāng)前激活的窗口
----SW_SHOWNOACTIVATE 以初始化大小顯示窗口但不改變當(dāng)前激活的窗口
----SW_SHOWNORMAL 激活并顯示窗口,如果是最大(小)化,窗口將會(huì)還原。第一次運(yùn)行程序 時(shí)應(yīng)該使用這個(gè)值

如果調(diào)用成功,這個(gè)函數(shù)會(huì)返回一個(gè)大于等于32的值,否則調(diào)用失敗,其返回值的意義如下:

–0 系統(tǒng)內(nèi)存或資源不足
–ERROR_BAD_FORMAT .EXE文件格式無(wú)效(比如不是32位應(yīng)用程序)
–ERROR_FILE_NOT_FOUND 指定的文件設(shè)有找到
–ERROR_PATH_NOT_FOUND 指定的路徑?jīng)]有找到

// 引入庫(kù)
[DllImport("kernel32.dll")]
public static extern int WinExec(string programPath, int operType);

// 調(diào)用
string pathStr=@"C:\Users\Administrator\Desktop\program.exe";
var result = WinExec(pathStr, (int)ShowWindowCommands.SW_SHOW);

C# 調(diào)用可執(zhí)行exe文件幾種方法小結(jié)

1.利用進(jìn)程池方式啟動(dòng)

string exefile = "xxx.exe";
if (File.Exists(exefile)) {
    Process process = new Process();   // params 為 string 類(lèi)型的參數(shù),多個(gè)參數(shù)以空格分隔,如果某個(gè)參數(shù)為空,可以傳入””
    ProcessStartInfo startInfo = new ProcessStartInfo(exefile, params);
    process.StartInfo = startInfo;
    process.Start();
}

2.遮蔽CLI啟動(dòng)窗口

string exefile = "xxx.exe";
if (File.Exists(exefile)) {
    Process process = new Process();
    ProcessStartInfo startInfo = new ProcessStartInfo(exefile, path);
    startInfo.UseShellExecute = false;
    startInfo.RedirectStandardOutput = true;    startInfo.CreateNoWindow = true;
    process.StartInfo = startInfo;
    process.Start();
    process.WaitForExit(2000);
    string output = process.StandardOutput.ReadToEnd();
    rtb_analyze.Text = output;
    process.Close();         
}

3.異步啟動(dòng)方式

public void exec(string exePath, string parameters)
{
    Process process = new System.Diagnostics.Process();
    process.StartInfo.FileName = exePath;
    process.StartInfo.Arguments = parameters;
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.RedirectStandardOutput = true;
    process.Start();
    process.BeginOutputReadLine();
    process.OutputDataReceived += new  DataReceivedEventHandler(processOutputDataReceived);
}

參考資料:

1、http://m.fzitv.net/article/81639.htm
2、https://www.cnblogs.com/daochangone/p/11364775.html
3、https://www.cnblogs.com/semth/p/10494685.html

到此這篇關(guān)于C# 調(diào)用外部exe的三種方式的文章就介紹到這了,更多相關(guān)C# 調(diào)用外部exe內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • DevExpress實(shí)現(xiàn)GridControl同步列頭checkbox與列中checkbox狀態(tài)

    DevExpress實(shí)現(xiàn)GridControl同步列頭checkbox與列中checkbox狀態(tài)

    這篇文章主要介紹了DevExpress實(shí)現(xiàn)GridControl同步列頭checkbox與列中checkbox狀態(tài),需要的朋友可以參考下
    2014-08-08
  • C#中的一些延時(shí)函數(shù)

    C#中的一些延時(shí)函數(shù)

    這篇文章主要介紹了C#中的一些延時(shí)函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • C# GroupBy的基本使用教程

    C# GroupBy的基本使用教程

    這篇文章主要給大家介紹了關(guān)于C# GroupBy的基本使用教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • C# winform點(diǎn)擊生成二維碼實(shí)例代碼

    C# winform點(diǎn)擊生成二維碼實(shí)例代碼

    這篇文章主要介紹了 C# winform點(diǎn)擊生成二維碼實(shí)例代碼,需要的朋友可以參考下
    2017-04-04
  • C#泛型詳解

    C#泛型詳解

    本文詳細(xì)講解了C#中的泛型,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • winfrom 在業(yè)務(wù)層實(shí)現(xiàn)事務(wù)控制的小例子

    winfrom 在業(yè)務(wù)層實(shí)現(xiàn)事務(wù)控制的小例子

    winfrom 在業(yè)務(wù)層實(shí)現(xiàn)事務(wù)控制的小例子,需要的朋友可以參考一下
    2013-03-03
  • 詳解C#如何讀寫(xiě)config配置文件

    詳解C#如何讀寫(xiě)config配置文件

    這篇文章主要介紹了詳解C#如何讀寫(xiě)config配置文件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • c#通過(guò)反射實(shí)現(xiàn)對(duì)象自動(dòng)映射的實(shí)現(xiàn)

    c#通過(guò)反射實(shí)現(xiàn)對(duì)象自動(dòng)映射的實(shí)現(xiàn)

    本文主要介紹了c#通過(guò)反射完成對(duì)象自動(dòng)映射的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-02-02
  • WPF輕松實(shí)現(xiàn)進(jìn)度條的示例代碼

    WPF輕松實(shí)現(xiàn)進(jìn)度條的示例代碼

    WPF中的ProgressBar控件用于表示任務(wù)進(jìn)度,適用于文件下載、數(shù)據(jù)處理等場(chǎng)景,本文將通過(guò)XAML和C#代碼展示如何創(chuàng)建一個(gè)基本的WPF進(jìn)度條,并演示如何通過(guò)事件處理程序更新進(jìn)度條的值來(lái)模擬耗時(shí)操作,感興趣的小伙伴跟著小編一起來(lái)看看吧
    2024-12-12
  • 詳解C#中委托的概念與使用

    詳解C#中委托的概念與使用

    委托這個(gè)名字取的神乎其神的,但實(shí)質(zhì)是函數(shù)式編程,把函數(shù)作為參數(shù)傳遞給另一個(gè)參數(shù)。這篇文章主要為大家介紹一下C#中委托的概念與使用,需要的可以參考一下
    2023-02-02

最新評(píng)論

富顺县| 巩义市| 辰溪县| 灵台县| 平利县| 班戈县| 乐平市| 大足县| 平阴县| 平定县| 三门峡市| 牡丹江市| 茶陵县| 颍上县| 墨脱县| 商丘市| 射洪县| 奎屯市| 宁海县| 兴义市| 梅河口市| 佛山市| 浑源县| 嘉善县| 张家界市| 刚察县| 徐水县| 桐乡市| 绥滨县| 绥芬河市| 金坛市| 营口市| 牡丹江市| 佳木斯市| 镶黄旗| 石柱| 彰武县| 佛学| 南宫市| 栾城县| 静乐县|