#c_sharp
Добрый день. Написал приложение-1 на C#, которое создает папку. Основное приложение-2 качает его, и закидывает в другую папку внутри себя, что-то вроде "firstApp\secondApp\приложение-1.exe", после чего приложение-2 запускает приложение-1, которое создает папку не в secondApp\firstApp\приложение-1-folder, а в secondApp\приложение-1-folder. При этом, когда вручную запускать приложение-2, оно работает как нужно и создает папку в secondApp\firstApp\приложение-1-folder. То есть при запуске приложения-1 из вне, оно создает директорию не внутри себя, а в корне каталога, из которого была запущена. Как решается данная проблема? Код приложения-2, которое запускает приложение-1 ZipFile.ExtractToDirectory(DownloadName, DownloadName.Remove(DownloadName.Length - 4)); Process.Start(DownloadName.Remove(DownloadName.Length - 4) + "\\" + DownloadName.Replace(".zip", ".exe"), "-sd"); Код приложения-1, которое создает папку Directory.CreateDirectory("data");
Ответы
Ответ 1
Необходимо указать рабочую директорию приложения, проще всего это сделать в свойствах ярлыка, который будет запускать ваше приложение. В свойствах назначенного задания, также присутствует аналогичная настройка. Внутри кода программ,это можно сделать так string exeDir =Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); Directory.SetCurrentDirectory(exeDir);Ответ 2
Путь папки приложения. string path = Directory.GetCurrentDirectory(); string path = Application.StartupPath;Ответ 3
Вы не должны использовать относительные пути, если не хотите таких сюрпризов. Дело в том, что относительный путь — это путь относительно текущего каталога, а не относительно положения программы на диске. (Нет, это не одно и то же.) Программа сама не контролирует стартовое значение текущего каталога, поэтому либо она должна в самом начале устанавливать его, либо просто всегда работать с полными путями. Связанный вопрос: Как определяется каталог поиска файла? О том, как получить каталог, в котором лежит приложение, здесь: Как задать относительный путь для создания файла в C#?
Комментариев нет:
Отправить комментарий