我正面临着使用system.diagnostics.process对象运行bat文件的困境。我有一个代码,用于在类库中运行bat文件,我将其编译为dll。我通过使用编译时注册它使dll com可以互操作。我使用强密钥签名,导出类型库并使用regasm和gacutil命令将dll放入GAC。然后,我在dll中创建了特定类的对象,该对象具有使用vbscript中的server.createobject方法执行bat文件的方法。然后我调用了bat执行的方法。调用方法可以正常但cmd提示符不会弹出,也不会执行bat文件。我检查了它是否与interop dll有问题但是dll与VB6代码一起工作正常。有人可以帮我解决这个问题吗?我不确定它是否在IIS服务器上有一些权限问题。或者,对于dll,ASP上的vbscript无法执行cmd执行吗?
谢谢, 地理位置。
答案 0 :(得分:0)
显然你可能需要运行cmd,然后只需输入输入:
// Get the full file path
string strFilePath = "c:\\temp\\test.bat";
// Create the ProcessInfo object
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo("cmd.exe");
psi.UseShellExecute = false;
psi.RedirectStandardOutput = true;
psi.RedirectStandardInput = true;
psi.RedirectStandardError = true;
psi.WorkingDirectory = "c:\\temp\\";
// Start the process
System.Diagnostics.Process proc = System.Diagnostics.Process.Start(psi);
// Open the batch file for reading
System.IO.StreamReader strm = System.IO.File.OpenText(strFilePath);
// Attach the output for reading
System.IO.StreamReader sOut = proc.StandardOutput;
// Attach the in for writing
System.IO.StreamWriter sIn = proc.StandardInput;
// Write each line of the batch file to standard input
while(strm.Peek() != -1) {
sIn.WriteLine(strm.ReadLine());
}
strm.Close();
// Exit CMD.EXE
string stEchoFmt = "# {0} run successfully. Exiting";
sIn.WriteLine(String.Format(stEchoFmt, strFilePath));
sIn.WriteLine("EXIT");
// Close the process
proc.Close();
// Read the sOut to a string.
string results = sOut.ReadToEnd().Trim();
// Close the io Streams;
sIn.Close();
sOut.Close();
http://codebetter.com/brendantompkins/2004/05/13/run-a-bat-file-from-asp-net/