以经典asp中的com interop dll以编程方式运行bat文件的问题

时间:2011-07-08 19:08:44

标签: .net com interop asp-classic cmd

我正面临着使用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执行吗?

谢谢, 地理位置。

1 个答案:

答案 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/