Недавно я создал программу с использованием C ++ и библиотеки SDL. Первоначально все изображения и библиотеки DLL находились в одной папке с основным приложением. Я хотел упростить поиск основного приложения, поэтому вместо этого я переместил все изображения в их собственную папку и изменил исходный код, чтобы найти их в правильной папке. Все идет нормально. Основное приложение по-прежнему остается в той же папке, что и библиотеки DLL.
Я создал ярлык для основного приложения и поставил, что это его собственная папка. Я изменил цель на % windir% \ system32 \ cmd.exe / q / c start «» «»% SystemRoot% \ explorer.exe% UserProfile% \ Desktop \ Cupcake Corner Build 2.0 (exe-тест) \ dependecies \ Cupcake Corner.exe « в попытке сделать универсальный ярлык, чтобы ярлык работал для любого пользователя, которому я отправляю файлы.
После всего сказанного и сделанного я столкнулся с проблемой. Если я открою главное приложение, оно загрузит изображения и будет работать отлично. Если я попытаюсь запустить главное приложение через его ярлык, окно откроется правильно и отобразит правильный заголовок, хотя ни одно из изображений не будет загружено. Я попытался переместить некоторые файлы, чтобы увидеть, увидит ли ярлык их, если я помещу папку ресурсов в другое место, но пока не повезло.
изображения здесь -> C: \ Users \ Admin \ Desktop \ Cupcake Corner Build 2.0 \ dependecies \ resources
основное приложение / dlls здесь -> C: \ Users \ Admin \ Desktop \ Cupcake Corner Build 2.0 \ dependecies \
ярлык здесь -> C: \ Users \ Admin \ Desktop \ Cupcake Corner Build 2.0 \
Я использую Microsoft Visual Studio Express 2010. Я думаю, что это как-то связано с тем, как у меня установлен каталог проекта в опциях проекта, но я честно озадачен на этом этапе. Может кто-то указать мне верное направление?
Как правило, при работе с файлами в приложении (которое приложение знает, по крайней мере, изнутри), вы захотите иметь абсолютные пути.
Лучший способ решить эту проблему — иметь (набор) функций, которые добавляют абсолютный путь (найденный GetModuleFilename(0, ...)
или из какой-то конфигурации например в реестре)
std :: string myfiles_root_path = FindMyFilesRootPath ();
std :: string MakeFullPath (const std :: string &имя файла)
{
вернуть myfiles_root_path + имя файла;
}
Функция FindMyFilesRootPath()
использует один из методов выше, чтобы найти подходящий путь, и filename
имя файла, локального для вашего приложения.
Других решений пока нет …