在做动态库的安装包时,一开始习惯将DLL拷贝到system32下,以方便用户直接使用Demo,即可运行成功,但是这种做法会要求向系统目录下拷贝一些公司自己写的dll和sys,有时还会被360当成恶意程序删除,这里有一种思路就是将dll安装到安装路径中,而不再拷贝到系统目录下,直接设置安装路径为系统环境变量,也可以使Demo成功运行。
平常提到的MFC以及Windows API编程都是通过动态链接库输出函数实现的。应用程序在调用这些函数的时候,会按照如下的顺序查找这些动态连接库文件:
(1)应用程序所在的当前目录
(2)Windows目录
(3)Windows系统目录
(4)系统环境变量指示的目录
如果在这些目录中找不到DLL文件,程序就会出现运行异常。所以,为了保证程序的正常运行,用户最好把需要的特定动态连接库放在程序所在的目录中,这样也可以避免各种潜在的覆盖冲突。
http://chinabin.bokee.com/6671374.html
使用环境变量
这部分内容不能用到下列项目中:
- InstallScript
- InstallScript Object
- QuickPatch
- Smart Device
环境变量是能够通过安装程序设置在目标系统上的一对名称和值,它能够被你的应用程序或者其他的程序访问。
在Environment Variables视图中,你可以通过安装程序在目标系统上创建、设置(修改)和删除环境变量。也可以在视图中配置环境变量属性。
提示:对于Microsoft Windows 95或者98系统上,环境变量是在Autoexec.bat中创建、修改和删除的。在Windows NT4.0或者Windows2000或者更高的系统中环境变量是存储在注册表中的。
设置环境变量
这部分内容不能用到下列项目中:
- InstallScript
- InstallScript Object
- QuickPatch
- Smart Device
要创建一个新的环境变量或者修改该现有的环境变量值:
1、打开Environment Variables视图
2、右键单击EnvironmentVariables并选择AddEnvironment Variable。InstallShield将添加一个默认名为 NewEnvironmentVariable x的新环境变量。输入你想创建、修改或删除的环境变量名。
3、在右边窗口的环境变量属性表中编辑属性
环境变量属性
通过配置环境变量属性,你可以指定你想在目标系统上如何编辑现有的环境变量或者创建一个新变量。每一个环境变量的描述如下:
| 属性 | 描述 |
| Component | 选择你想把这个环境变量关联的构件。如果选择的构件安装或者卸载,根据你在环境变量的属性表中的设置,目标系统上环境变量会被创建、修改或删除。单击省略号按钮打开浏览构件对话框。 |
| Value | 输入这个环境变量的路径或值。你可以使用预定义的路径,象[INSTALLDIR]Bin。要输入多个路径,使用分号分隔 提示:如果On Install 属性设置为Remove,Value属性会被清除并且变成只读。 |
| On Install | 指明在关联的功能部件在目标系统安装时的动作。选择下列中的一个:
|
| Placement | 指明相对于现有的环境变量的值如何放置Value区域内的数据。选择下列选项中的一个:
|
| On Uninstall | 指明在关联的功能部件卸载时,环境变量是否从系统中删除。选择下面选项之一:
|
| Type | 如果目标系统是Windows NT 或者Windows 2000或者更高,这个属性指明环境变量的使用方式,是整个系统环境变量还是用户环境变量。如果目标系统是Windows9x,这个属性将被忽略。选择下列选项之一: System-创建修改或删除指定系统环境变量 User-创建修改或删除用户环境变量。这个环境变量针对于那个用户运行的安装程序,即谁登录的系统。 |
环境变量示例
代码:
/********************************************************************/
* The following code creates an environment variable under Windows NT
* for an entire system. You can modify the OnEnd event handler
* function block (or any other function block) to include this example
* code.
*
* NOTE: This code is only for InstallShield running on Windows NT.
* Also, the current user must have administrator privileges for this
* code to work.
/********************************************************************/
#define WM_WININICHANGE 0x001A
#define HWND_BROADCAST 0xffff
NUMBER nResult;
STRING szKey, szEnv;
POINTER pEnv;
begin
szKey = "SYSTEM//CurrentControlSet//Control//SessionManager//Environment";
RegDBSetDefaultRoot(HKEY_LOCAL_MACHINE);
nResult = RegDBSetKeyValueEx(szKey, "Fame", REGDB_STRING,"C://Test", -1);
if (nResult < 0) then
MessageBox("Failed to Set Environment Variable", WARNING);
else
MessageBox("Successfully Set Environment Variable",INFORMATION);
// Flush the NT registry to all applications.
szEnv = "Environment";
pEnv = &szEnv;
SendMessage (HWND_BROADCAST, WM_WININICHANGE, 0, pEnv );
endif;
// RebootDialog("", "", SYS_BOOTMACHINE);
end;
代码:
/********************************************************************/
* The following code creates an environment variable under Windows NT
* for the current user. You can modify the OnEnd event handler
* function block (or any other function block) to include this example
* code.
*
* NOTE: This script is only for InstallShield running on Windows NT.
* Also, the current user must have administrator privileges for this
* code to work.
/********************************************************************/
#define WM_WININICHANGE 0x001A
#define HWND_BROADCAST 0xffff
NUMBER nResult;
STRING szKey, szEnv;
POINTER pEnv;
begin
szKey="Environment";
RegDBSetDefaultRoot(HKEY_CURRENT_USER);
nResult=RegDBSetKeyValueEx(szKey,"Fame",REGDB_STRING,"C://test",-1);
if (nResult < 0) then
MessageBox("Failed to Set Environment Variable",WARNING);
else
MessageBox("Successfully Set Environment Variable",INFORMATION);
// Flush the NT registry to all applications.
szEnv = "Environment";
pEnv = &szEnv;
SendMessage (HWND_BROADCAST, WM_WININICHANGE, 0, pEnv );
endif;
//RebootDialog("","",SYS_BOOTMACHINE);
end;
在动态库安装过程中,为了避免将DLL拷贝到系统目录引发的问题,可以将DLL放在安装路径,并设置安装路径为系统环境变量。这样确保程序能正确找到DLL,同时避免了可能的冲突和安全风险。安装程序可以创建、设置或删除环境变量,尤其在Windows NT4.0及以上系统中,环境变量存储在注册表中。
1万+

被折叠的 条评论
为什么被折叠?



