kuratazen Ответов: 1

Программа, запущенная с process.start, не видит локальных файлов


Привет, ребята, у меня есть vb.net проблема, которая ставит меня в тупик. У меня есть компьютер с интерфейсом оператора, на котором работает программа, вызывающая другие программы, использующие этот процесс.Начало(anotherApp.exe) командование. Например, основная программа THEMCP.exe (мастер-Контрольная программа для всех, кто помнит трон) звонки ProgramA.exe который находится в подпапке where THEMCP.exe проживает. Все находится под ним C:\Program файлы...

ProgramA.exe читает два текстовых файла при запуске, и файлы содержат параметры, так что я могу использовать ProgramA.exe для нескольких применений в зависимости от содержания файлов. ProgramA.exe проверяет, присутствуют ли файлы, а затем читает их. Когда я бегу ProgramA.exe вручную, взяв на себя управление ПК и дважды щелкнув по экрану. ProgramA.exe в Проводнике Windows/файловом менеджере программа работает нормально, видит файлы параметров, и все хорошо. Когда я планирую ProgramA.exe использование процесса.Start() не удается найти файлы.

Является ли это проблемой разрешения windows или есть лучший способ запуска ProgramA.exe чем использование процессов.Start()? ProgramA.exe использует файл.Существует(имя файла), чтобы проверить, присутствуют ли файлы. Я не понимаю, почему он работает, когда запускается вручную, но он терпит неудачу, когда вызывается процессом.Начать. - Помочь?

Что я уже пробовал:

Я пробовал разные пути в файле " If.Exists()" безрезультатно. Независимо от того, что я использую - просто имя файла - полный путь с именем файла - приложение.StartupPath, он всегда работает нормально, если запускается вручную, но он терпит неудачу, если вызывается процессом.Начало().

Richard Deeming

Как вы создали эти файлы? Поскольку вы работаете в каталоге "Program Files", если программа, которая их создала, не была повышена и не имеет манифеста, они фактически не будут существовать в папке благодаря виртуализации UAC:

Я сохранил несколько файлов в каталоге Program Files, и теперь они исчезли! | Раймонд Чен[^]

Проверьте, находятся ли файлы в подкаталоге под %LOCAL­APP­DATA%\Virtual­Store.

kuratazen

Спасибо, что откликнулся, Ричард.

The files are simple text files created with Notepad. I copied them into the folder manually. They just contain one line of text with the paths where files will be copied from and to. Nothing overly complicated. I have to collect log files from multiple machines (each with their own PC) and figured this would be an easy way to do it. So as an example I currently have four folders for four machines - each has the same program (ProgramA.exe in this example) but the files have different paths in them - I'm just using the text files so I can re-use the program rather than making four duplicate programs with the paths hard coded. Maybe I need to add the folders to the system's Path statement or something like that?

1 Ответов

Рейтинг:
7

Dave Kreskowiak

Проблема в том, что одна из программ предполагает, что файлы находятся в "текущем каталоге". Этот каталог-не то, что вы думаете.

Вы запускаете свою программу MCP из определенного каталога Program Files. Затем вы запускаете программы из подкаталога. "Текущий каталог" - это не тот каталог, из которого была запущена программа. Это каталог MCP, где нет ваших файлов.

Вы должны привыкнуть создавать и использовать полные пути при выполнении файловых операций. Не просто указывайте имя файла и называйте его хорошим. Вы только что столкнулись с тем, почему это плохая идея.

В программе получите путь запуска и используйте Path.Объедините, чтобы добавить к нему свое имя файла. Вы можете получить путь запуска с первым ответом здесь[^] .


kuratazen

Спасибо, Дэйв - на самом деле это не решение проблемы. Я понимаю, о чем ты говоришь, и соглашусь, что иметь полный путь - это правильно. После того, как я исправил путь, вызываемая программа все еще не копировала файлы, как я хотел, но будет работать при запуске вручную.

Dave Kreskowiak

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

kuratazen

На самом деле я думаю, что вы правы - мои извинения. После некоторого шарканья я определил, что ProgramA на самом деле ищет в папке, из которой работает MCP, вместо того чтобы искать файлы в той же папке, где находится ProgramA. Я использовал "окружение.CurrentDirectory" и объединение этой строки с моим именем файла, так что нет, я не просто надеялся на лучшее. Я взгляну на ссылку и попробую еще раз. Когда он заработает, я опубликую, что это за рабочая комбинация.

kuratazen

Приложение.StartupPath был исправлением в программе. Соответственно! Я бы поспорил на деньги, что уже пробовал это сделать. Спасибо Дейву Кресковяку.