Как запустить внешний exe в режиме UserInteractive?C#

Место общения программистов C#
Ответить
Anonymous
 Как запустить внешний exe в режиме UserInteractive?

Сообщение Anonymous »

У меня возникла ситуация, требующая запуска внешнего консольного приложения .NET Framework, которое, в свою очередь, запускает приложение Windows Forms, встраивающее WebView2.
Этот внешний exe-файл необходимо вызывать из контроллер веб-API, из-за которого эта ошибка появляется при вызове form.ShowDialog() в exe:

Отображение модального диалогового окна или формы когда приложение не запускается Режим UserInteractive не является допустимой операцией. Укажите стиль ServiceNotification или DefaultDesktopOnly для отображения уведомления из приложения-службы.

Как переопределить поведение/разрешить exe запускать форму?
Интересное примечание: при запуске веб-API в IIS Express все работает нормально, но эта проблема возникает при запуске в локальном IIS, поэтому я пытаюсь запустить процесс от имени другого пользователя.
Вот как я запускаю процесс из метода контроллера веб-API:
public string RunExternalExe(string filename, string arguments = null)
{
var process = new Process();

var ssPwd = new System.Security.SecureString();

process.StartInfo.Domain = "domain";
process.StartInfo.UserName = "username";
process.StartInfo.LoadUserProfile = true;

string password = "****";

for (int x = 0; x < password.Length; x++)
{
ssPwd.AppendChar(password[x]);
}

password = "";
process.StartInfo.Password = ssPwd;

process.StartInfo.FileName = filename;

if (!string.IsNullOrEmpty(arguments))
{
process.StartInfo.Arguments = arguments;
}

process.StartInfo.CreateNoWindow = true;
process.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
process.StartInfo.UseShellExecute = false;

process.StartInfo.RedirectStandardError = true;
process.StartInfo.RedirectStandardOutput = true;

var stdOutput = new StringBuilder();
process.OutputDataReceived += (sender, args) => stdOutput.AppendLine(args.Data); // Use AppendLine rather than Append since args.Data is one line of output, not including the newline character.

string stdError = null;

try
{
process.Start();
process.BeginOutputReadLine();
stdError = process.StandardError.ReadToEnd();
process.WaitForExit();
}
catch (Exception e)
{
throw new Exception("OS error while executing " + Format(filename, arguments) + ": " + e.Message, e);
}

if (process.ExitCode == 0)
{
return stdOutput.ToString().Trim();
}
else
{
var message = new StringBuilder();

if (!string.IsNullOrEmpty(stdError))
{
message.AppendLine(stdError);
}

if (stdOutput.Length != 0)
{
message.AppendLine("Std output:");
message.AppendLine(stdOutput.ToString());
}

throw new Exception(Format(filename, arguments) + " finished with exit code = " + process.ExitCode + ": " + message);
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... ctive-mode
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»