.NET調(diào)用控制臺(tái)下生成的exe文件,傳參及獲取返回參數(shù)的思路及代碼
最近客戶要求把一個(gè)樹(shù)型目錄導(dǎo)出成文件夾套文件夾的結(jié)構(gòu),并提供下載功能,剛開(kāi)始感覺(jué)功能比較容易實(shí)現(xiàn)就在最短的時(shí)間把基本功能搞定,當(dāng)發(fā)布到服務(wù)器上之后發(fā)現(xiàn)直接在本應(yīng)用程序中導(dǎo)出目錄(下帶ntko文檔及附件)再進(jìn)行壓縮,程序直接卡死了!后來(lái)就想到了要做一window服務(wù),只是客戶給的時(shí)間太短,沒(méi)辦法先寫(xiě)一控制臺(tái)程序生成一個(gè)exe文件,然后再調(diào)用這個(gè)exe文件,這樣就可以緩解本程序壓力了!
下面寫(xiě)一個(gè)測(cè)試項(xiàng)目
在調(diào)用exe端傳過(guò)去一個(gè)要壓縮的文件夾的路徑,然后在控制臺(tái)下獲取該路徑進(jìn)行壓縮,壓縮完成之后返回壓縮過(guò)后的文件夾路徑或者返回一個(gè)成功與否的狀態(tài)
1、返回路徑
string path = @"E:\測(cè)試項(xiàng)目\201303\TestWindowsService\ca\bin\Debug\ca.exe";
string fileName = path;
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.FileName = fileName;
p.StartInfo.CreateNoWindow = true;
p.StartInfo.Arguments = @"D:\zhai\aaa\安置幫教";//參數(shù)以空格分隔,如果某個(gè)參數(shù)為空,可以傳入””
p.Start();
p.WaitForExit();
//此處可以返回一個(gè)字符串,此例是返回壓縮成功之后的一個(gè)文件路徑
string output = p.StandardOutput.ReadToEnd();
this.TextBox1.Text = output;
控制臺(tái)下代碼:
static void Main(string[] args)
{
//接收傳過(guò)來(lái)的待壓縮文件路徑
string url = "";
//返回壓縮過(guò)后的文件路徑
string retUrl = "";
if (!string.IsNullOrEmpty(args[0]))
{
url = args[0];
}
//此處引用了一個(gè)壓縮文件的dll using Ionic.Zip;
using (ZipFile zf = new ZipFile(System.Text.Encoding.Default))
{
zf.AddDirectory(url);
zf.Save(@"D:\zhai\aaa\"+DateTime.Now.ToString("yyyyMMddHHmmss")+".zip");
retUrl = @"D:\zhai\aaa\"+DateTime.Now.ToString("yyyyMMddHHmmss")+".zip";
}
Console.Write(retUrl);
}
2、返回一個(gè)狀態(tài)
//Process myProcess = new Process();
//string fileName = path;
//string para = "你好 北緯30度!";
//ProcessStartInfo myProcessStartInfo = new ProcessStartInfo(fileName, para);
//myProcess.StartInfo = myProcessStartInfo;
//myProcess.Start();
//while (!myProcess.HasExited)
//{
// myProcess.WaitForExit();
//}
//int returnValue = myProcess.ExitCode;
控制臺(tái)下
static int Main(string[] args)
{
int i=0;
if (!string.IsNullOrEmpty(args[0]))
{
url = args[0];
}
if(url)
{
i=1;
}
return i;
}
相關(guān)文章
jQuery+Ajax用戶登錄功能的實(shí)現(xiàn)
前幾天把jbox源碼修改成仿QQ空間模擬窗口后發(fā)現(xiàn)有很多人在關(guān)注。今天就貼一下我利用該模擬窗口實(shí)現(xiàn)的用戶登錄功能的代碼。2009-11-11DataList中TextBox onfocus調(diào)用后臺(tái)void靜態(tài)方法及獲取相應(yīng)行數(shù)
DataList中我放了一個(gè)TextBox 現(xiàn)在的問(wèn)題是當(dāng)我光標(biāo)放到TextBox上的時(shí)候。如果讓onfocus調(diào)用后臺(tái)某一個(gè)void靜態(tài)方法并且在靜態(tài)方法里邊獲取光標(biāo)相應(yīng)的DataList的相應(yīng)行數(shù),本文介紹如何實(shí)現(xiàn),感興趣的朋友可以了解下2013-01-01asp.net 生成靜態(tài)時(shí)的過(guò)濾viewstate的實(shí)現(xiàn)方法
有時(shí)候我們?cè)谟胊sp.net生成靜態(tài)文件的時(shí)候,總會(huì)出現(xiàn)一些viewstate的字符,因?yàn)槭庆o態(tài)的不是aspx文件,所有沒(méi)必要留了,精簡(jiǎn)代碼等原因,大家就需要看下面的方法了。2009-03-03asp.net中3種驗(yàn)證碼示例(實(shí)現(xiàn)代碼)(數(shù)字,數(shù)字字母混和,漢字)
asp.net中3種驗(yàn)證碼示例代碼,分別是數(shù)字,數(shù)字字母混和,漢字,需要的朋友可以參考下2012-10-10.Net6集成IdentityServer4?+AspNetCore?Identity讀取數(shù)據(jù)表用戶且鑒權(quán)授權(quán)管理A
這篇文章主要介紹了.Net6集成IdentityServer4與AspNetCore?Identity讀取數(shù)據(jù)表用戶且鑒權(quán)授權(quán)管理API,IdentityServer4?實(shí)現(xiàn)鑒權(quán)、授權(quán),AspNetCore?Identity實(shí)現(xiàn)數(shù)據(jù)庫(kù)用戶管理表直接生成,下文詳情需要朋友可以參考一下2022-07-07datagrid綁定list沒(méi)有數(shù)據(jù) 表頭不顯示的解決方法
datagrid綁定list沒(méi)有數(shù)據(jù) 表頭不顯示的問(wèn)題,那是因?yàn)?綁定了null,你給list new一下就好 表頭就會(huì)有啦2013-05-05VS2015自帶LocalDB數(shù)據(jù)庫(kù)用法詳解
這篇文章主要為大家詳細(xì)介紹了VS2015自帶LocalDB數(shù)據(jù)庫(kù)的用法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06