Я пытаюсь запустить приложение (операционная система, мое приложение и приложение, которое я хочу запустить, все 32 бита), из .NET 3.51.Проблема запуска System.Diagnostics.Process под Windows 7
Код, запускающий Process, используется для других приложений, но есть тот, который дает нам головную боль. Если мы «дважды щелкнем» по значку приложения, он работает так, как ожидалось, что означает, что он отлично работает как приложение на компьютере. Двойной щелчок .exe напрямую, также работает.
Операционная система - Windows 7 32Bits (домашний и/или профессиональный).
Приложение .NET скомпилировано с помощью x86, чтобы избежать проблем.
Код, который запускает «Процессы», находится внутри DLL (также 32 бита), выполненного нами, в основном это простая DLL, которая содержит некоторый «Общий код» по всем направлениям, общие методы, функции и все, что мы используем во всем наш код. Один из этих методов выглядит следующим образом:
public static bool FireUpProcess(Process process, string path, bool enableRaisingEvents,
ProcessWindowStyle windowStyle, string arguments)
{
if (process != null)
{
try
{
process.StartInfo.FileName = @path;
if (arguments != null)
{
if (arguments != String.Empty)
{
process.StartInfo.Arguments = arguments;
}
}
process.StartInfo.WindowStyle = windowStyle;
process.EnableRaisingEvents = enableRaisingEvents;
process.Start();
}
catch
{
try
{
process.Kill();
}
catch (InvalidOperationException)
{
} // The process is not even created
return false;
}
}
else
{
return false;
}
return true;
}
Я не знаю, кто написал этот метод, но он работает в течение примерно шести лет с различными приложениями, поэтому я предполагаю, что это «нормально». Тем не менее, у нас есть клиент с программным обеспечением, которое не будет запускаться при передаче этого аргумента.
Аргументы:
- процесс является System.Diagnostics.Process создан с помощью простого «нового процесса();»
- путь полный путь к. ехе. «C: /path/to/my.exe»
- enableRaisingEvents ложна
- windowStyle Максимизирован (но попробовал другие).
Это дает crappy MessageBox ... который я счастливо увековечил. Это на испанском языке, но перевод должен быть легким:
Он говорит:
Ошибка приложения непредвиденное исключение произошло за программу (0x0eedfade) в ...
погуглить что 0x0eedfade дает странные результаты, которые выглядят страшно, но, по правде говоря, если я иду в .exe, который я пытаюсь запустить и дважды щелкнуть по нему, он отлично работает.
For The Record: Если я пытаюсь запустить другие вещи (т.е .: notepad.exe, Adobe Acrobat Reader) он работает, но Firefox не открывается и не показывает ошибку.
Такое поведение «некоторая работа, некоторые из них» приводит меня к мысли, что может возникнуть проблема с механизмом безопасности Windows 7 или подобным, который я не знаю.
Что мне не хватает или что-то не так?
ОБНОВЛЕНИЕ: Хорошо; У меня есть копия программного обеспечения. Это грязное программное обеспечение, но оно работает. Теперь, когда я могу отлаживать, я вижу, что программа запускает мой метод FireUpProcess
.
Как предложил я добавил код WorkingDirectory, но вот код:
public static bool FireUpProcess(Process process, string path, bool enableRaisingEvents, ProcessWindowStyle windowStyle)
{
if (process != null)
{
try
{
if (!String.IsNullOrEmpty(@path))
{
process.StartInfo.FileName = @path;
process.StartInfo.WorkingDirectory = System.IO.Path.GetDirectoryName(@path);
process.StartInfo.WindowStyle = windowStyle;
// Suscribe to the exit notification
process.EnableRaisingEvents = enableRaisingEvents;
// Disable to prevent multiple launchs
Framework.Check.LogWarning("LAUNCHING EXTERNAL DEVICE WITH PATH: " + path);
process.Start(); // HERE The program reports the following:
Это означает, что «Программа не может быть запущена, поскольку ddip.dll отсутствует ... попробуйте переустановить бла бла ».
Дело в том, если я исполню же @Path из командной строки, программа открывает совершенно:
Это открывает программу. И то же самое происходит, если я нажму на «ярлык», который находится в меню «программы». В этом ярлыке нет никаких параметров, это простой вызов исполняемого файла.
Вопрос: В чем разница между моим кодом и другими методами?
Должно быть что-то другое, что заставляет мой процесс не запускаться.
Любые идеи?
ОБНОВЛЕНИЕ И РЕШЕНИЕ
Я сделал это работает, используя один из указанных ниже предоставленных ответов. Оказывается, что никто не указал мне на решение, но все они дали мне хорошие идеи здесь и там.
Я добавил приложение к нашим приложениям (должно было быть, это было с возраста перспективы, не знаю, почему его там не было на первом месте). Я продемонстрировал приложение, добавленное с помощью приложения VStudio 2008 add file -> application manifest.
В этом, я уверен, у нас есть это:
<requestedExecutionLevel level=“asInvoker” uiAccess=“false” />
Нам не нужно администратора или что-нибудь подобное, но, видимо, Vista/7 нужно знать это.
После этого процесс запускается правильно.
примечание: UseShellExecute является истинным по умолчанию (как это было предложено некоторыми), вы должны явно включить его в ложное, если это то, что вы хотите.
Я знаю, это не вопрос, но вы можете упростить 'if' to' if (! String.IsNullOrEmpty (arguments)) '. SCNR – Bobby
Что такое 'DBSWIN.EXE'? По многим сайтам это может быть проблемой с расширением третьей стороны для IE ... может ли ПК быть заражен? – Bobby
@Bobby DBSWIN.EXE является частью программного обеспечения, которое эти парни используют: http://www.duerrdental.de/en/home-dd/ (это на самом деле: http://www.duerrdental.de/en/products/ imaging/dbswin-imaging-software /) –