在xp下用vc6作了一个小程序,通过注册表注册为开机自动运行,程序本身基本上没有问题,但是却遇到了一些意料之外的问题,所以想请大家讨论一下:程序中用到了一个皮肤控件,是在初始化函数里加载皮肤的:
BOOL CMyApp::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif //设置皮肤
if(!SetSkin(_T("xp_corona.ssk")))
{
MessageBox(NULL,"找不到文件 'xp_corona.ssk',请确认该文件是否存在!","程序启动错误",
MB_OK|MB_ICONERROR);
return -1;
}
int checkfile;
……
}问题是,正常通过手动运行该程序没有任何问题,皮肤能正常加载;但是如果是开机自动运行的话,该程序就会在
SetSkin(_T("xp_corona.ssk"))处失败,提示找不到文件"xp_corona.ssk",但经过检查,该文件是存在的。为什么会出现这种问题?我思考了很久,猜测可能是系统把文件"xp_corona.ssk"当成一个资源,在系统的某个地方
给它“注册”了,程序在使用它的时候通过这个“注册”来访问资源。当开机自动运行时,该资源可能并没有“注册”,
所以就会找不到该文件。
因此,我想知道,程序自动启动时,到底干了些吗?它和我们一般的手动启动有什么不同吗?
上面是我个人的猜测,不知道是否正确,请各位发表一下自己的理解,谢了。
BOOL CMyApp::InitInstance()
{
AfxEnableControlContainer();
#ifdef _AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif //设置皮肤
if(!SetSkin(_T("xp_corona.ssk")))
{
MessageBox(NULL,"找不到文件 'xp_corona.ssk',请确认该文件是否存在!","程序启动错误",
MB_OK|MB_ICONERROR);
return -1;
}
int checkfile;
……
}问题是,正常通过手动运行该程序没有任何问题,皮肤能正常加载;但是如果是开机自动运行的话,该程序就会在
SetSkin(_T("xp_corona.ssk"))处失败,提示找不到文件"xp_corona.ssk",但经过检查,该文件是存在的。为什么会出现这种问题?我思考了很久,猜测可能是系统把文件"xp_corona.ssk"当成一个资源,在系统的某个地方
给它“注册”了,程序在使用它的时候通过这个“注册”来访问资源。当开机自动运行时,该资源可能并没有“注册”,
所以就会找不到该文件。
因此,我想知道,程序自动启动时,到底干了些吗?它和我们一般的手动启动有什么不同吗?
上面是我个人的猜测,不知道是否正确,请各位发表一下自己的理解,谢了。
不过,还是有个问题:为什么手动运行就不存这个问题,而开机自动运行就会这样呢?他们之间有什么不同?恐怕暂时还找不出答案,不过倒是学会了以后能用绝对路径的地方就尽量用绝对路径,这对程序大概是只好不坏的。
谢了各位。