Название моего вопроса может уже дать тот факт, что я не уверен в том, чего хочу, поскольку это может и не иметь смысла.Запуск .NET-процесса в AppDomain
Для проекта я хочу иметь возможность запускать исполняемые файлы в моем приложении, одновременно перенаправляя их стандартные и входящие так, чтобы мое приложение могло связываться с ними через эти потоки.
В то же время я не хочу, чтобы эти исполняемые файлы выполняли определенные действия, такие как использование сети, или чтение/запись за пределами их собственного рабочего каталога (в основном я хочу разрешить им писать и читать из стандартный вход и выход).
Я читал в разных местах в Интернете, что эти разрешения могут быть установлены с помощью PermissionStates при создании AppDomain, в котором вы можете выполнить исполняемые файлы. Тем не менее, я не нашел способ связаться с исполняемыми файлами через их стандарт в и из, что очень важно. Однако я могу это сделать при запуске нового процесса (Process.Start()
), хотя тогда я не могу установить границы того, что разрешено исполняемому файлу.
Моя интуиция подсказывает мне, что я должен каким-то образом выполнить процесс внутри AppDomain, так что процесс «запускает» в домене, хотя я не вижу способа сделать это прямо.
Мой коллега выполнил это, создав прокси-приложение, которое в основном является другим исполняемым файлом, в котором создается AppDomain, в котором выполняется фактический исполняемый файл. Затем прокси-приложение запускается процессом в основном приложении. Я думаю, что это крутая идея, хотя я чувствую, что мне не нужен этот шаг.
Я могу добавить код, содержащий то, что я сделал до сих пор, создание процесса и приложения, хотя вопрос довольно длинный. Я добавлю, если вы захотите.
Это чрезвычайно сложно, к сожалению, есть причина, по которой эти подходы к безопасности терпят неудачу снова и снова, они огромные усилия, и никто не понимает их правильно. Однако то, что вы можете сделать, - это запустить процесс как ограниченный пользователь, - хотя он не дает вам детализации, которую дает CAS, это также намного проще и обеспечивает изоляцию процесса.In-process extensions может очень легко убить ваше приложение :) – Luaan
Невозможно запустить процесс в «AppDomain», потому что это совершенно разные концепции. 'Процесс AppDomain запускается в процессах, а не наоборот. И, конечно же, они работают только для приложений .NET: – Luaan
@ Luaan, тогда что происходит, когда я вызываю 'AppDomain.Create (...). ExecuteAssembly (pathToMyStuff)'? Мне кажется, что это начинает новый процесс, но, согласно вашему утверждению, это не так ... – Glubus