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

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

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

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

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

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

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

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

下面我們就來說一下第二種方法的實現(xiàn)。

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

public class Program
{
    public static void Main(string[] args)
    {
        if(args.Length > 0 && !string.IsNullOrEmpty(args[0]))
        {
            string num = args[0];//獲取傳遞過來的參數(shù)
            //DSCommuncationInfo 自定義的類;GetOracleData:連接Oracle數(shù)據(jù)庫和獲取數(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時,使用進(jìn)程的方式把exe啟動,調(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ù)以空格分隔,如果某個參數(shù)為空,可以傳入“”
    myProcess.StartInfo.Arguments = examinerNo;
    p.StartInfo.WorkingDirectory = exePath;//設(shè)置要啟動的進(jìn)程的初始目錄
    myProcess.Start();//啟動
    myProcess.WaitForExit(15000);//等待exe程序處理完,超時15秒
    string xmldata = myProcess.StandardOutput.ReadToEnd();//讀取exe中內(nèi)存流數(shù)據(jù)
    if (!string.IsNullOrEmpty(xmldata))
    {
        //自己實現(xiàn)的序列化
        var info = SerializedXMLHelper.Deserializer(xmldata);
    }
}

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

Process.Start()無法啟動exe程序的問題:

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

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

相關(guān)文章

最新評論

隆安县| 晋宁县| 始兴县| 南城县| 梅州市| 思南县| 浮山县| 彭泽县| 丹巴县| 正阳县| 南靖县| 宁河县| 通榆县| 景东| 突泉县| 榆林市| 巫山县| 滨海县| 蒙城县| 尉犁县| 库车县| 澄江县| 白银市| 麦盖提县| 洪洞县| 金川县| 乌拉特前旗| 镇赉县| 北碚区| 休宁县| 尼勒克县| 泾阳县| 尚志市| 裕民县| 日喀则市| 大宁县| 班戈县| 郧西县| 大方县| 阿瓦提县| 大洼县|