Приложения, запущенные другими процессами, смешивают относительную папку - PullRequest
0 голосов
/ 07 января 2012

Проще говоря, если процесс A запускает приложение B. Всякий раз, когда приложение B пытается сделать относительный доступ к файлу, такой как

using(StreamReader sr = new StreamReader("log.txt"))

, он обращается к log.txt в папке, внутри которой находится процесс A, а не папка, в которой находится приложение B.Прямо сейчас мое текущее исправление для этого состоит в том, чтобы получить имя файла модуля моего приложения + путь, удалить имя файла и добавить переменную пути ко всем моим относительным вызовам доступа к файлу.

Что вызывает это и как я могу избежать этого

Ответы [ 2 ]

1 голос
/ 07 января 2012

В процессе A, где вы запускаете приложение B, вы должны были указать рабочую папку.

Взгляните на это: http://msdn.microsoft.com/en-us/library/system.diagnostics.processstartinfo.workingdirectory.aspx

РЕДАКТИРОВАТЬ (после выяснения со стороны OP, что процесс A является планировщиком задач и поэтому не может быть изменен)

Я думаю, что планировщик задач позволяет вам указать рабочий каталог для приложения, которое вы планируете. Но в любом случае, даже если вы не можете, вы всегда можете установить текущий каталог вашего приложения в нужное место первым делом, как только оно начнется, используя SetCurrentDirectory () .

0 голосов
/ 08 января 2012

Получив доступ к Process, вы можете попробовать получить Модуль .Отсюда вы можете получить доступ к полному пути процесса (используя свойство FileName ) и, в свою очередь, его каталог.

string fullPath = myProcess.Modules[0].FileName;
string workingDirectory = System.IO.Directory.GetParent(fullPath);

Согласно этой теме 32-разрядные модули не смогут перечислять модули 64-разрядных сборок, поэтому вам придется перекомпилировать вашу программу в 64-разрядную, если целевые процессы будут работать в этом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...