[已解决问题] 关于“重定向”的问题
提问时间: 2008-03-23 22:41
悬赏分:80 浏览:313 次

我最近在用C#语言开发一个在WINDOWS平台下可以运的支持汇编语言编译的软件,目前遇到了一个麻烦:该软件有个功能是可以进行编译和连接,如果进行编译啊?用C#怎么实现?是直接调中masm.exe那个命令吗?怎样调用?它需要指定要连接的.asm文件,我需要怎么样给他指定那个文件呢?如果调用了,当出错时,我怎样捕获出错信息并且显示在窗口中?还是,就是如何进行连接(Link)啊?如果要调用Link.exe命令的话,具体怎么去做的呢?它需要指定要连接的.obj文件,我需要怎么样给给指定那个文件呢?谁能帮我吗?


提问者:jackiejiao - 初学一级

问题补充:一楼那位deerchao你的答案在控制台下可以捕获到出错信息,非常了不起了。但是我在用控件(比如用一个Button,在它的单击事件里输入那个代码)就不能捕获,请问在控件里的事件里要怎么用啊?急!!!!

最佳答案
你的问题可以分为两个:
1,如何使用C#调用命令行工具,给它输入命令行参数,并获取输出信息;
2,如何使用masm.exe和link.exe这两个命令行工具.

第一个问题你可以参考一下这样的代码:
using System;
using System.Diagnostics;

namespace ProcessDemo
{
class Program
{
[STAThread]
static void Main(string[] args)
{
ProcessStartInfo info;
Process proc;
string result;

//第一个参数是要调用的程序的路径
//第二个参数是要传给它的参数
//这里显示的是调用我的电脑上的C#编译器
info=new ProcessStartInfo(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe", @"c:\aaa.cs /target:exe");

//说明我们要捕获程序的输出信息
info.RedirectStandardOutput = true;
//为了捕获输出信息,必须设置这个属性为false
info.UseShellExecute=false;
//设置要调用的程序的工作目录(当前目录)
info.WorkingDirectory=@"C:\";
//隐藏cmd窗口的显示
info.WindowStyle=ProcessWindowStyle.Hidden;
//运行该程序
proc=Process.Start(info);
//获取程序的输出
result=proc.StandardOutput.ReadToEnd();
Console.WriteLine("输出信息是:");
//显示调用的程序往控制台窗口输出的信息
Console.WriteLine(result);
}
}
}
获取屏幕输出之后,你可能还需要判断它是不是给出了一个/几个错误提示,或者警告等等.这时你可以先尝试在cmd窗口下通过命令行使用这(两)个工具,找出出错信息文本的规律,然后使用正则表达式来进行匹配.如果不太熟悉正则表达式,可以看一下"正则表达式30分钟教程",随便搜一下就能找到了.

第二个问题你就得看相关的帮助文档了. 你也可以试一下Dos下的通用帮助命令参数:
masm /?

masm /help
link.exe也是一样.
2008/3/24 2:08:26 回答者:deerchao


提问者对于答案的评价:虽然最终没有解答我的问题,但还是非常感谢,最起码给我提供了一个思路,谢谢!!
其它回答(1)
我个人虽说是个菜鸟。不过我想的是。如果要做这样的软件
调用的不应该是 Masm 这个工具吧。
具体的应该是自己去写这些东西吧。如果机器上没有Masm 那你就得 自己去装 或者随软件一起安装,那如果用户不小小 。这个Masm不好用了。则你的 程序也就不能用了吧。
虽说的有点。不过还是个菜鸟。想的是有些太。。。

4个月前   回答者:天生俪姿 - 菜鸟二级
评论
4个月前   deerchao :
做IDE类的程序,调用命令行来编译/生成程序是比较合理的思路,目前几乎所有的大型IDE使用的都是这样的架构.
4个月前   jackiejiao :
一楼那位deerchao你的答案在控制台下可以捕获到出错信息,但是我在用控件(比如用一个Button,在它的单击事件里输入那个代码)就不能捕获,请问要怎么用啊?
3个月前   jackiejiao :
我用CSC.EXE命令可以捕捉,但是用MASM.EXE就无法捕捉,捕捉的是空的字符串,为什么啊?
3个月前   关涛的博客 :
我有这个功能的方法,我自己已经把它给封装了!以后要用的话,直接就传个指令就行了!
   您需要登录以后才能回答!
我的问题    我要提问


快到期问题

> 问题排行榜

有不合适内容,建议去除