Я сделал игру на основе MFC, и мой проект включает в себя изображения и звуки. Теперь я хочу создать установщик для его распространения.
Я использовал ресурсы, указав их точный путь, например, в
img->Load(L"C:\\Users\\Ad33l's\\Desktop\\block mania\\block mania\\res\\db.png");
MCIWndCreate(NULL, NULL,WS_POPUP|MCIWNDF_NOPLAYBAR|MCIWNDF_NOMENU,L"C:\\Users\\Ad33l's\\Desktop\\block mania\\block mania\\res\\tick.wav");
1. Может кто-нибудь сказать мне какой-нибудь способ избежать жесткого кодирования фактического пути к ресурсу, поскольку эти файлы ресурсов не будут присутствовать по этому же точному пути на других компьютерах?
2. Также помогите мне обработать эти файлы ресурсов во время создания отдельной НАСТРОЙКИ (я использую предварительный установщик)
(как актуальный ответ).
Не используйте абсолютный путь, всегда используйте относительный путь; Относительно вашего EXE-файла есть одно решение.
Путь к EXE можно найти с помощью GetModuleFileName.
char appPath[MAXFILENAMELEN];
GetModuleFileName(NULL, appPath, MAXFILENAMELEN);
(приложение) имя appPath вводит в заблуждение, оно содержит полное имя приложения; вам нужно извлечь путь из полного имени приложения.
Мы делаем что-то вроде этого:
(отредактируйте, чтобы сделать его компилируемым в юникоде)
TCHAR applicationPath[MAX_PATH];
GetModuleFileName(NULL, applicationPath, MAX_PATH);
CString sSoundFile(applicationPath);
PathRemoveFileSpec(sSoundFile.GetBuffer());
sSoundFile.ReleaseBuffer();
Оттуда вы можете сделать что-то вроде (псевдокод-иш):
img.Load( appPath + "//Images//db.png" );
У вас может быть переменная, которая сохраняет каталог, в который они хотят установить вашу программу. После того, как они выберут каталог, в который они хотят установить его, удалите его. Или вы также можете использовать системные папки, такие как папка appdata
Первым решением было бы настроить проект установки для установки установочных файлов под DesktopFolder\ блокировать манию \ блокировать манию \ рез. Затем вы можете получить доступ в вашем приложении к текущему пользователю рабочий стол location и добавьте к нему оставшееся исправление местоположения (block mania \ block mania \ res).
Другим решением будет настройка проекта установки для создания реестров во время установки, в которых будут храниться пути к установочным файлам. Затем ваше приложение может прочитать пути установки из реестра.
Наконец, вы можете также создать во время установки переменные среды, содержащие пути к файлу установки, а затем использовать в своем приложении переменные среды для доступа к расположению установленных файлов.