Запуск приложения

  • Автор темы Flid
  • Дата начала
Статус
Закрыто для дальнейших ответов.
F

Flid

#1
Пусть есть на диске exe файл с приложением A. Оно не обязательно написано на .NET. Цель моей проги (B - написана на C#) похожа на цель вируса - заменить этот exe на себя. При запуске B нужно выполнить какие-то действия и затем запустить приложение A, как будто ничего не произошло. Приложение A будет лежать где-то либо на диске в отдельном файле, переименованное во что-то неузнаваемое (и переименовывать в *.exe нельзя), либо как часть приложения B, что предпочтительнее. Есть идеи, как это можно реализовать? И возможно ли это вообще?


Пробовал запускать .NET сборки через System.Reflection.Assembly. Взял пример из MSDN. Попробовал сделать так:

Код C#

Код:
			//читаем сборку из файла
System.IO.FileStream FS = new FileStream("C:\\filename.exe",FileMode.OpenOrCreate);
byte[] b = new byte[FS.Length];
FS.Read(b, 0, (int)FS.Length);

Assembly ExternalAssembly = Assembly.Load(b);
Assembly CurrentAssembly = Assembly.GetExecutingAssembly();
Object o = CurrentAssembly.CreateInstance("Poligon.Form1");
ExternalAssembly.EntryPoint.Invoke(o, null);
Invoke мне радостно сообщает, что у исполняемого метода вывалилось исключение. Опытным путем выяснилось, что исключение это такое: System.InvalidOperationException: до создания первого объекта IWin32Window в приложении необходимо вызвать Application.SetCompatibleTextRenderingDefault.
Что самое интересное, это исключение происходит как раз при вызове Application.SetCompatibleTextRenderingDefault(fals e) в запускаемом приложении!
Что за фигня?
 
W

WildDuck

#2
Если вы хотите просто запустить приложение то можно так...

Код:
using System.Diagnostics;
...
ProcessStartInfo startInfo = new ProcessStartInfo(@".\utils.exe");
Process.Start(startInfo);
 
F

Flid

#3
отлично... а теперь представим, что у меня нет exe файла на диске, есть только в памяти. У меня есть байтовый массив с исполняемым файлом и его мне нужно запустить в текущем процессе. Создавать файл на диску и записывать туда exeшник запрещено. Я вот это пытаюсь сделать
 
Статус
Закрыто для дальнейших ответов.