欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#調(diào)用EXE文件實(shí)現(xiàn)傳參和獲取返回結(jié)果

 更新時(shí)間:2023年01月08日 11:47:41   作者:^@^lemon tea^@^  
本文主要介紹了C#調(diào)用EXE文件實(shí)現(xiàn)傳參和獲取返回結(jié)果,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

在項(xiàng)目開發(fā)的過(guò)程中,不可避免的遇到這種情況:主程序由于算法的第三方庫(kù)使用的目標(biāo)平臺(tái)需為X86的,但是在調(diào)用別家公司的程序或者是其他程序驅(qū)動(dòng)不能為X86的(使用x64或者Any cup的沒(méi)問(wèn)題)。

我遇到的連接oracle數(shù)據(jù)庫(kù)報(bào)異常“嘗試加載Oracle客戶端庫(kù)時(shí)引BadImageFormatException。如果在安裝32位Oracle客戶端組件的情況下以64位模式運(yùn)行將出此問(wèn)題”。這就不由的抱怨一句oracle數(shù)據(jù)庫(kù)真的是事多呀,一大堆的問(wèn)題。

出現(xiàn)這種情況該怎么做呢,兩邊的平臺(tái)要求是不一樣的,不能修改。

第一種方法:使用其他的不用區(qū)分目標(biāo)平臺(tái)的庫(kù)進(jìn)行連接;

第二種方法:編寫一個(gè)exe程序,其對(duì)接的操作都在這個(gè)程序中實(shí)現(xiàn),并由主程序調(diào)用。

下面我們就來(lái)說(shuō)一下第二種方法的實(shí)現(xiàn)。

1、新建一個(gè)“控制臺(tái)應(yīng)用程序”-- 在項(xiàng)目啟動(dòng)類文件Program中Main()函數(shù)中接收傳遞來(lái)的參數(shù);代碼如下:

public class Program
{
    public static void Main(string[] args)
    {
        if(args.Length > 0 && !string.IsNullOrEmpty(args[0]))
        {
            string num = args[0];//獲取傳遞過(guò)來(lái)的參數(shù)
            //DSCommuncationInfo 自定義的類;GetOracleData:連接Oracle數(shù)據(jù)庫(kù)和獲取數(shù)據(jù)函數(shù)
            DSCommuncationInfo info = GetOracleData(num);
            if (info != null)
            {
                //序列化成字符串?dāng)?shù)組
                string result = SerializedXMLHelper.Serializer(info);
                //將指定的字符串值(后跟當(dāng)前行終止符)寫入標(biāo)準(zhǔn)輸出流。
                Console.WriteLine(result);
            }
        }
    }
}

2、主程序調(diào)用exe時(shí),使用進(jìn)程的方式把exe啟動(dòng),調(diào)用代碼如下:

public void StartExternalProgram(string examinerNo)
{
    //這里在dll程序中調(diào)用exe,路徑是獲取dll所在路徑
    string exePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    string exeName = "CterHisExe.exe";
    string fileName = Path.Combine(exePath, exeName);
    //使用進(jìn)程
    Process myProcess = new Process();
    myProcess.StartInfo.UseShellExecute = false;
    myProcess.StartInfo.RedirectStandardOutput = true;
    myProcess.StartInfo.FileName = fileName;
    myProcess.StartInfo.CreateNoWindow = true;
    //傳參,參數(shù)以空格分隔,如果某個(gè)參數(shù)為空,可以傳入“”
    myProcess.StartInfo.Arguments = examinerNo;
    p.StartInfo.WorkingDirectory = exePath;//設(shè)置要啟動(dòng)的進(jìn)程的初始目錄
    myProcess.Start();//啟動(dòng)
    myProcess.WaitForExit(15000);//等待exe程序處理完,超時(shí)15秒
    string xmldata = myProcess.StandardOutput.ReadToEnd();//讀取exe中內(nèi)存流數(shù)據(jù)
    if (!string.IsNullOrEmpty(xmldata))
    {
        //自己實(shí)現(xiàn)的序列化
        var info = SerializedXMLHelper.Deserializer(xmldata);
    }
}

雖然這種方法比較復(fù)雜,但是也是解決平臺(tái)不兼容的可行方法之一。

Process.Start()無(wú)法啟動(dòng)exe程序的問(wèn)題:

1、可能是參數(shù)不是絕對(duì)路徑,exe的路徑地址不正確。
2、如果在外部直接運(yùn)行exe程序沒(méi)有問(wèn)題,而當(dāng)這個(gè)程序中有配置文件,或在啟動(dòng)的時(shí)候需要讀取其他文件時(shí),需要設(shè)置StartInfo的WorkingDirectory屬性為應(yīng)用程序的目錄。

到此這篇關(guān)于C#調(diào)用EXE文件實(shí)現(xiàn)傳參和獲取返回結(jié)果的文章就介紹到這了,更多相關(guān)C#調(diào)用EXE文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于C#編寫經(jīng)理評(píng)分系統(tǒng)

    基于C#編寫經(jīng)理評(píng)分系統(tǒng)

    最近接了這樣一個(gè)項(xiàng)目,要求使用c#編寫經(jīng)理評(píng)分系統(tǒng),需求,要顯示員工信息,實(shí)現(xiàn)項(xiàng)目經(jīng)理給員工評(píng)分功能,今天小編分步驟給大家介紹,需要的的朋友參考下
    2017-03-03
  • 簡(jiǎn)述C#枚舉高級(jí)戰(zhàn)術(shù)

    簡(jiǎn)述C#枚舉高級(jí)戰(zhàn)術(shù)

    這篇文章主要介紹了簡(jiǎn)述C#枚舉高級(jí)戰(zhàn)術(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C#導(dǎo)出Excel的示例詳解

    C#導(dǎo)出Excel的示例詳解

    這篇文章主要為大家詳細(xì)介紹了C#導(dǎo)出Excel的示例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C#面向?qū)ο缶幊讨幸蕾嚪崔D(zhuǎn)原則的示例詳解

    C#面向?qū)ο缶幊讨幸蕾嚪崔D(zhuǎn)原則的示例詳解

    在面向?qū)ο缶幊讨?,SOLID?是五個(gè)設(shè)計(jì)原則的首字母縮寫,旨在使軟件設(shè)計(jì)更易于理解、靈活和可維護(hù)。本文將通過(guò)實(shí)例詳細(xì)講講C#面向?qū)ο缶幊讨幸蕾嚪崔D(zhuǎn)原則,需要的可以參考一下
    2022-07-07
  • C#實(shí)現(xiàn)Winform小數(shù)字鍵盤模擬器

    C#實(shí)現(xiàn)Winform小數(shù)字鍵盤模擬器

    本文主要介紹了C#實(shí)現(xiàn)Winform小數(shù)字鍵盤模擬器,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C#檢測(cè)DataSet是否為空的方法

    C#檢測(cè)DataSet是否為空的方法

    這篇文章主要介紹了C#檢測(cè)DataSet是否為空的方法,涉及C#操作DataSet的技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下
    2015-04-04
  • c#測(cè)試反射性能示例

    c#測(cè)試反射性能示例

    這篇文章主要介紹了c#測(cè)試反射性能示例,Activator.CreateInstance和AssemblyCreateInstance性能測(cè)試,需要的朋友可以參考下
    2014-03-03
  • C#后臺(tái)調(diào)用WebApi接口的實(shí)現(xiàn)方法

    C#后臺(tái)調(diào)用WebApi接口的實(shí)現(xiàn)方法

    本文主要介紹了C#后臺(tái)調(diào)用WebApi接口的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C#之Expression表達(dá)式樹實(shí)例

    C#之Expression表達(dá)式樹實(shí)例

    這篇文章主要介紹了C#之Expression表達(dá)式樹,包括了表達(dá)式樹的原理與用法技巧,需要的朋友可以參考下
    2014-10-10
  • C#中async/await之線程上下文工作原理

    C#中async/await之線程上下文工作原理

    這篇文章主要為大家介紹了C#中async/await之線程上下文工作原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>
    2023-05-05

最新評(píng)論