Проблема с запуском bat-файла программно из dll com interop на классическом asp - PullRequest
0 голосов
/ 08 июля 2011

Я сталкиваюсь с трудностями при запуске файла bat с использованием объекта system.diagnostics.process.У меня есть код для запуска файла bat в библиотеке классов, которую я скомпилировал в DLL.Я сделал dll com совместимым, зарегистрировав его во время компиляции.Я подписал его с помощью сильного ключа, экспортировал библиотеку типов и поместил dll в GAC, используя команды regasm и gacutil.Затем я создал объект определенного класса в dll, который имеет метод для выполнения файла bat, используя метод server.createobject в vbscript.Я тогда назвал метод для выполнения летучей мыши.Метод вызывается нормально, но приглашение cmd не появляется, и файл bat не выполняется.Я проверил, есть ли проблема с dll взаимодействия, но dll работала хорошо с кодом VB6.Может кто-нибудь помочь мне с этим вопросом?Я не уверен, если какой-то вопрос разрешения на сервере IIS.Или выполнение cmd невозможно через vbscript на ASP для DLL?

Спасибо, Geo.

1 Ответ

0 голосов
/ 09 июля 2011

Очевидно, вам может потребоваться запустить 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/

...