0

我制作了一个基于 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.还指导我在创建独立SETUP期间处理这些资源文件(我正在使用高级安装程序)

4

3 回答 3

0

你可以有一个变量来保存他们想要安装你的程序的目录。在他们选择了他们想要安装它的目录之后,离开那个。或者您也可以使用系统文件夹,如 appdata 文件夹

于 2014-10-08T14:33:38.357 回答
0

(作为实际答案)。

不要使用绝对路径,始终使用相对路径;相对于您的 EXE 文件是一种解决方案。

可以使用 GetModuleFileName 找到 EXE 路径。

char appPath[MAXFILENAMELEN];
GetModuleFileName(NULL, appPath, MAXFILENAMELEN);

(附录)appPath 名称具有误导性,它包含应用程序的全名;您需要从完整的应用程序名称中提取路径。

我们做这样的事情:

(编辑使其可在 unicode 中编译)

TCHAR applicationPath[MAX_PATH];
GetModuleFileName(NULL, applicationPath, MAX_PATH);
CString sSoundFile(applicationPath);
PathRemoveFileSpec(sSoundFile.GetBuffer());
sSoundFile.ReleaseBuffer();

从那里,您可以执行类似(伪代码)的操作:

img.Load( appPath + "//Images//db.png" );
于 2014-10-08T14:58:37.877 回答
0

第一个解决方案是配置您的安装项目以在DesktopFolder \block mania\block mania\res下安装安装文件。然后,您可以在您的应用程序中访问当前用户桌面位置并将剩余的修复位置(块狂热\块狂热\res)附加到它。

另一种解决方案是将安装项目配置为在安装时创建注册表,该注册表将存储安装文件的路径。然后,您的应用程序可以从注册表中读取安装路径。

最后,您还可以在安装时创建包含安装文件路径的环境变量,然后在您的应用程序中使用环境变量来访问已安装文件的位置。

于 2014-10-09T08:02:26.637 回答