zl程序教程

您现在的位置是:首页 >  后端

当前栏目

.NET调用控制台下生成的exe文件,传参及获取返回参数的思路及代码

Net控制文件思路代码 获取 参数 生成
2023-06-13 09:15:00 时间

最近客户要求把一个树型目录导出成文件夹套文件夹的结构,并提供下载功能,刚开始感觉功能比较容易实现就在最短的时间把基本功能搞定,当发布到服务器上之后发现直接在本应用程序中导出目录(下带ntko文档及附件)再进行压缩,程序直接卡死了!后来就想到了要做一window服务,只是客户给的时间太短,没办法先写一控制台程序生成一个exe文件,然后再调用这个exe文件,这样就可以缓解本程序压力了!

下面写一个测试项目

在调用exe端传过去一个要压缩的文件夹的路径,然后在控制台下获取该路径进行压缩,压缩完成之后返回压缩过后的文件夹路径或者返回一个成功与否的状态

1、返回路径

复制代码代码如下:

stringpath=@"E:\测试项目\201303\TestWindowsService\ca\bin\Debug\ca.exe";
           stringfileName=path;

           Processp=newProcess();

           p.StartInfo.UseShellExecute=false;

           p.StartInfo.RedirectStandardOutput=true;

           p.StartInfo.FileName=fileName;

           p.StartInfo.CreateNoWindow=true;

           p.StartInfo.Arguments=@"D:\zhai\aaa\安置帮教";//参数以空格分隔,如果某个参数为空,可以传入””

           p.Start();

           p.WaitForExit();
          //此处可以返回一个字符串,此例是返回压缩成功之后的一个文件路径
           stringoutput=p.StandardOutput.ReadToEnd();
           this.TextBox1.Text=output;

控制台下代码:

复制代码代码如下:

staticvoidMain(string[]args)
       {
          //接收传过来的待压缩文件路径
           stringurl="";
          //返回压缩过后的文件路径
           stringretUrl="";

           if(!string.IsNullOrEmpty(args[0]))
           {
               url=args[0];
           }
           //此处引用了一个压缩文件的dll usingIonic.Zip;
           using(ZipFilezf=newZipFile(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、返回一个状态

复制代码代码如下:
//ProcessmyProcess=newProcess();

           //stringfileName=path;
           //stringpara="你好北纬30度!";
           //ProcessStartInfomyProcessStartInfo=newProcessStartInfo(fileName,para);
           //myProcess.StartInfo=myProcessStartInfo;

           //myProcess.Start();

           //while(!myProcess.HasExited)
           //{

           //   myProcess.WaitForExit();

           //}
           //intreturnValue=myProcess.ExitCode;

控制台下

复制代码代码如下:
staticintMain(string[]args)
       {
         inti=0;
         if(!string.IsNullOrEmpty(args[0]))
           {
               url=args[0];
           }
          if(url)
          {
            i=1;
           }
          returni;
       }