Я знаю, что это старый пост, но я хотел бы добавить, что, безусловно, можно запустить удаленный исполняемый файл без PsExec, который многие вирусные программы отмечают как проблемный. Также большинство администраторов sys не хотят PsExec на своих веб-серверах. Кроме того, запуск удаленного исполняемого файла через подключенный диск или UNC не означает, что у вас установлена лицензия, поэтому может произойти сбой (или запустить демонстрационную версию) в зависимости от программного обеспечения.
Ключ заключается в том, чтобы обернуть шаги System.Diagnostics.Process
в службе WCF. Вот частичный пример ...
{
// Define a service contract.
[ServiceContract(Namespace = "http://MyDataServices.foo.com")]
public interface IDataService
{
[OperationContract]
bool ProcessStatTransfer(MemoryStream inputCommands, string inputName);
}
// Implement the IDataService service contract in a service class.
public class DataService : IDataService
{
// Implement the IDataService methods.
public bool ProcessStatTransfer(MemoryStream inputCommands, string inputName)
{
try
{
// StatTransferLocation is C:\Program Files\StatTransfer12-64\st.exe
// on the machine that hosts the service
string m_stattransfer_loc = ConfigurationManager.AppSettings["StatTransferLocation"].ToString();
string m_stattransfer_file = ConfigurationManager.AppSettings["CommandFiles"].ToString() + inputName;
using (FileStream m_fsfile = new FileStream(m_stattransfer_file, FileMode.Create, FileAccess.Write))
{
inputCommands.WriteTo(m_fsfile);
}
ProcessStartInfo processInfo = new ProcessStartInfo("\"" + m_stattransfer_loc + "\"");
processInfo.Arguments = "\"" + m_stattransfer_file + "\"";
processInfo.UseShellExecute = false;
processInfo.ErrorDialog = false;
processInfo.CreateNoWindow = true;
Process batchProcess = new Process();
batchProcess.StartInfo = processInfo;
batchProcess.Start();
return true;
}
catch
{
return false;
}
}
.....
Затем вы добавляете ссылку на сервис и вызываете метод. Нет сопоставлений, PsExec или WMI. Это чистое решение C #.