Abhijeet P Singh Ответов: 1

System.io.filenotfoundexception образ не найден после установки


всем привет..
Я создал приложение WPF с помощью c#, в котором у меня есть контекстное меню с изображениями..
Я использую пользовательское действие для запуска моего приложения после установки..
Когда приложение запускается в первый раз, оно дает мне исключение Системы.ИО.Исключение filenotfoundexception
но когда он запускается вручную двойным щелчком по значку рабочего стола, никаких исключений не возникает и работает нормально, и все изображения отображаются..
вот код использования изображения..
titleMenuItem.Image = System.Drawing.Image.FromFile("test.ico");

но когда я запускаю приложение в visual studio, никаких исключений не возникает..
и я использую установщик visual studio, Если это имеет значение..

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

Я помещаю изображения в папку bin/debug приложения и в папка Application конечно, подстава..

11917640 Member

Когда программа выполняется из Visual Studio, текущим каталогом является каталог проекта, а не bin/debug. Поместите файл .ico в каталог проекта и скопируйте его в bin/debug в событии post-build.

Abhijeet P Singh

он прекрасно работает, когда я запускаю его в visual studio..
проблема возникает, когда пользовательское действие установщика запускает exe..
даже когда приложение запускается вручную, никаких исключений не возникает..

Richard MacCutchan

Проверьте детали в исключении. Он скажет вам, какой именно файл он не может найти.

Abhijeet P Singh

Ричард Маккатчан, сэр..
Я не могу опубликовать здесь снимок экрана, иначе я должен был показать его вам..
он говорит мне, в каком файле проекта и в какой функции исключение не вызывается больше ничего..

Richard MacCutchan

Затем вы должны использовать отладчик, чтобы найти дополнительную информацию. Мы не можем догадаться, что делает этот код.

1 Ответов

Рейтинг:
1

Dave Kreskowiak

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

"Текущий каталог" во время установки и при запуске .exe из вашего пользовательского действия (кстати, плохая идея, она должна быть необязательной, если вы хотите, чтобы это произошло!) отличается от "текущего каталога", как указано в ярлыке, который вы используете для запуска приложения. В ярлыке каталог "Start In" указывает, на что должен быть установлен "текущий каталог" при запуске целевого объекта ярлыка.

Теперь это также означает, что ваше приложение закодировано таким образом, что оно всегда предполагает, что текущий каталог-это то, что вы думаете. Это означает, что ваш код использует относительные пути для всего, а не генерирует полные пути к файлам, которые он использует.

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

Всегда создавайте и используйте полные пути ко всем файлам, используемым вашим приложением. Это пути к файлам, которые начинаются с буквы диска "C:" или UNC-пути "\\server\share\directory".