运行link86.exe时c#进程参数无效
本文关键字:进程 参数 无效 link86 exe 运行 | 更新日期: 2023-09-27 18:07:07
大家下午好。我接下了一个c#编程任务,这个任务以前是由别人编写的。这个程序最初调用两个perl脚本来执行。这些perl脚本是在90年代编写的,基本上在调用各种8086可执行文件来汇编和链接.a86文件之前做了大量的格式化和过滤。
一开始,我重写了perl脚本,以提高速度并接受c#程序中的参数。我不太擅长解释一些原始剧本的内容。
现在在c#程序中,我已经为所有可执行文件实例化了进程,并且成功地启动了它们,除了运行link86.exe时我得到错误。link86进程有如下信息:
Process test = new Process();
ProcessStartInfo testproc = new ProcessStartInfo();
testproc.FileName = path + "''link86.exe";
testproc.Arguments = procData; // procData is a string
test.testproc.Start();
/* I'm having trouble passing all of these objects as arguments
* to link86. link86 does not like the '&' being in the string,
* also the ' ' (space) is not required between arguments. After
* 6 objects as arguments the command line returns the following error
* 'The system cannot execute the specified program' it seems as if the
* the command line is trying to execute the .obj file I don't know why
* this is.
* The error returned by the debugger says the 'Parameter was invalid'
*/
procData = (in text visualizer)
file.OBJ, &
file2.OBJ, &
TO outputfile.LNK OPTIONS
procData = (when hovering over object)
"file.OBJ, &'nfile2.OBJ, &'nTO outputfile.LNK OPTIONS"
在命令行中,下面的命令一直运行到我输入第7个.obj文件。
link86文件。obj, file2.obj,…输出文件。链接选项
我查了一些关于link86.exe的信息,我发现它的命令行长度限制为127个字符。我试图传递大约95 .obj文件到link86作为参数。
如果我能找到一种方法,通过c#传递90多个参数给link86,那将大有帮助。
感谢您的时间和对这件事的考虑!看问题的Perl部分:
open( FILE "link86 ^& < $tempfn|" ) || die "Could not run link86: $!'n";
语法错误。FILE
是一个无字文件句柄。你需要在后面加一个逗号来打开下一个参数。所以,这一行应该是:
open( FILE, "link86 ^& < $tempfn|" ) || die "Could not run link86: $!'n";
第二个参数是shell要执行的命令。后面的管道表示命令的输出将通过FILE
文件句柄通过管道传输到您的程序。
^&
将被执行该程序的shell解释。在这种情况下,我假设壳层是cmd.exe
。^
是cmd.exe
中的转义字符。因此,它导致下面的&
被解释为一个文字字符。(请参阅,每个人都以错误的方式引用命令行参数:"当cmd转换命令行并看到^
时,它忽略^
字符本身并将下一个字符复制到新命令行…")
我不确定它是做什么的,但它似乎基本上使用$tempfn
中的任何文件名的内容执行link86
。
while( <LINK> )
{
print; # what does the print without parameters do?
if( /^(EXCEPTION|ERROR)/i )
{
$abflag = 1;
}
print $dlogH "'nabort Flag: $abflag'n";
}
从LINK
裸字文件句柄中读取。每行存储在$_
中,然后打印。如果没有参数,print
将$_
的内容打印到当前选择的输出文件句柄(很可能是STDOUT
)。
如果行中包含EXCEPTION
或ERROR
,则设置中止标志。对于从LINK
读取的每一行,它打印中止标志的值。一旦设置,中止标志保持设置。