PB调用C#写的EXE,如何获取返回其执行程序的字符串值?

Hexudong1979 2016-10-18 09:54:36
PB我没接触过,但所做的项目中涉及到:PB调用C#写的EXE。这个C#的EXE是我们公司写的,PB是另外公司,需要让对方来调用我们的EXE,调用时候规定了XML输入参数,执行完EXE后,PB需要获取EXE给他的XML格式返回值,在调用过程中,我们公司会有一些业务流程窗体交互。
请高手来帮忙解决!
C#代码EXE服务执行程序(ConsoleApp.exe)样例代码的如下:
static void Main(string[] args)
{
string procName = System.Diagnostics.Process.GetCurrentProcess().ProcessName;
File.AppendAllText("D:\\systemtool.txt", procName + "\n");
if ((System.Diagnostics.Process.GetProcessesByName(procName)).GetUpperBound(0) == 0)
{
File.AppendAllText("D:\\systemtool.txt", "Bussiness handle" + "\n");
//接收传过来的XML格式字符串参数
string paramXML = "";
if (!string.IsNullOrEmpty(args[0]))
{
paramXML = args[0];
File.AppendAllText("D:\\systemtool.txt", "Input XML parameters:" + paramXML + "\n");
XmlDocument oXmlDoc = new XmlDocument();
try
{
oXmlDoc.LoadXml(paramXML);
XmlNode root = oXmlDoc.DocumentElement;
XmlNodeList nodes = root.ChildNodes;
foreach (XmlNode node in nodes)
{
File.AppendAllText("D:\\systemtool.txt", node.Name + "->" + node.InnerText + "\n\n");
}

//调用其他业务窗体代码
.................

}
catch (Exception error)
{
File.AppendAllText("D:\\systemtool.txt", "Exception error->" + error.Message + "\n");
throw new Exception(error.Message);
}
finally
{
oXmlDoc = null;
}
}
//返回值
string returnParam = "<Root><RetValue>1</RetValue></Root>";

Console.Write(returnParam);//将返回值写入到标准的控制台输出。
}

C#调用EXE执行程序样例,如下:
Process p = new Process();
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
//外部Console服务程序物理路径
p.StartInfo.FileName = @"F:\ConsoleApp.exe";
p.StartInfo.CreateNoWindow = true;
//启动参数
p.StartInfo.Arguments = "<Root><Inparam>0</Inparam></Root>";
p.Start();
p.WaitForExit();
//返回值
string returnValue = p.StandardOutput.ReadToEnd();
...全文
1999 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
WorldMobile 2016-10-20
  • 打赏
  • 举报
回复
把输出重定向到一个文件里,试试以下代码 run("f:\consoleapp.exe '<Root><Inparam>0</Inparam></Root>' >> c:\111.txt") 然后再pb里打开c:\111.txt进行处理
Hexudong1979 2016-10-20
  • 打赏
  • 举报
回复
引用 4 楼 zjl8008 的回复:
写文本文件,我也发2次
不能用数据库和文本
Hexudong1979 2016-10-19
  • 打赏
  • 举报
回复
引用 2 楼 nocry115 的回复:
为啥发2遍?请参考:http://blog.csdn.net/nocry115/article/details/52851722
感谢参考提供,但我需要的是调用EXE,而不是dll。
nocry115 2016-10-19
  • 打赏
  • 举报
回复
为啥发2遍?请参考:http://blog.csdn.net/nocry115/article/details/52851722
zjl8008 2016-10-19
  • 打赏
  • 举报
回复
写文本文件,我也发2次
Hexudong1979 2016-10-18
  • 打赏
  • 举报
回复
请高手帮忙编写测试通过的源码贴上,非常感谢,着急用!
提供给第三方软件,调用COM组件DLL方式进行实现,如delphi、PB等。调用方法与黑龙江省医保社保卡调用方式一致。各软件调用方法也可自行网上查询,如“delphi调用C#的COM组件DLL”。 基于C#的COM组件DLL,可实现SM2签名验签,SM4加解密,100%适用于黑龙江省国家医保接口中进行应用。 1、调用DLL名称:JQSM2SM4.dll 加解密类名:JQSM2SM4.SM2SM4Util CLSID=5B38DCB3-038C-4992-9FA3-1D697474FC70 2、GetSM2SM4函数说明 函数原型public string GetSM2SM4(string smType, string sM2Prikey, string sM4Key, string sInput) 1)参数一smType:填固定字符串,识别功能,分别实现SM2签名、SM4解密、SM4加密。SM2签名入参填“SM2Sign”、SM4解密入参填“SM4DecryptECB”、SM4加密入参填“SM4EncryptECB”. 2)参数二sM2Prikey:SM2私钥 3)参数三sM4Key:SM4密钥 4)参数四sInput:当smType=SM2Sign,则sInput入参填SM4加密串;当smType=SM4DecryptECB,则sInput入参填待解密SM4密文串;当smType=SM4EncryptECB,则sInput入参填待加密的明文串; 5)函数返回:当smType=SM2Sign,则返回SM2签名信息;当smType=SM4DecryptECB,则返回SM4解密信息;当smType=SM4EncryptECB,则返回SM4加密信息;异常时,则返回“加解密异常:详细错误说明” 3、购买下载后,可加QQ65635204、微信feisng,免费提供技术支持。 4、注意事项: 1)基于.NET框架4.0编,常规win7、win10一般系统都自带无需安装,XP系统则需安装;安装包详见压缩包dotNetFx40_Full_x86_x64.exe 2)C#的DLL,需要注册,解压后放入所需位置,使用管理员权限运行“JQSM2SM4注册COM.bat”即可注册成功,然后即可提供给第三方软件进行使用,如delphi、PB等。

680

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder API 调用
社区管理员
  • API 调用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧