用inno setup制作安装程序,怎么把在环境变量path中添加路径

用inno setup制作安装程序,怎么把在环境变量path中添加路径,第1张

计算机属性里找到‘高级系统设置’,再点开‘高级’,有个‘环境变量’,点进去,在‘系统变量’里找到path这个变量(如果没有就新建一个path),编辑path输入路径。 我只用过win7的,至于xp系统的设置方法应该差不多,相信你能行滴。 再说说这个路径的...

inno 在Setup段中使用变量方法: Inno Setup添加Path变量 在[setup]段添加 ChangesEnvironment=true 在[Code]段中添加 procedure SetEnv(aEnvName, aEnvValue: stringaIsInstall, aIsInsForAllUser: Boolean)//设置环境变量函数

该命令使用批处理文件进行执行,其文件包的目录结构及文件内容如下:

目录结构:

------ JDK_Environment 文件夹

------ readme.txt 文本文档文件

------ JDK_Environment.bat 批处理文件

------ Step 文件夹

------ JDK_Env_Step1.bat 批处理文件

------ JDK_Env_Step2.bat 批处理文件

文件:

文件1:readme.txt

位置:JDK_Environment 文件夹

内容:

==========使用wmic命令对JDK的环境变量进行配置,可即时生效,不用重启系统。==========

文件清单:

1. JDK_Environment.bat

文件类型:Windows批处理文件

文件说明:可直接执行该批处理,一步完成JDK环境变量的设置。

注:可直接使用JDK_Environment.bat,一步完成JDK环境变量的设置,

若使用Step文件夹中的批处理,则需按说明分步完成。

2. Step

文件类型:文件夹

文件说明:分步执行其中两份批处理文件,完成JDK环境变量的设置。

2.1 JDK_Env_Step1.bat

文件类型:Windows批处理文件

文件说明:首先执行,完成JDK环境变量设置的第一步,JAVA_HOME的设置。

2.2 JDK_Env_Step2.bat

文件类型:Windows批处理文件

文件说明:其次执行,继续完成JDK环境变量设置的第二步,path与CLASSPATH的设置。

注意:

1. 若在path与CLASSPATH变量值的设置时,使用了JAVA_HOME的引用%JAVA_HOME%,则需在不同的“命令提示符”窗口中,分别进行JAVA_HOME与他们俩的设置工作。(Step中的设置方式即为此种情况)

即:

打开“命令提示符”窗口A,在A中进行了JAVA_HOME的设置。

则,下一步path与CLASSPATH的设置,需要重新打开一新的“命令提示符”窗口B,在B中进行他们俩的设置。

原因:

A中窗口虽成功进行了JAVA_HOME的设置,但新设置的变量对当前A窗口并不生效,若继续在其中使用JAVA_HOME的引用%JAVA_HOME%,对path与CLASSPATH进行设置,则会发生找不到%JAVA_HOME%的错误。

解决方案:

1.1 JAVA_HOME与其它需要引用到它的变量,分别在不同窗口,严格按先后顺序进行设置。(见Step文件夹)

1.2 在path与CLASSPATH中不对%JAVA_HOME%进行引用,直接使用绝对路径。(见JDK_Environment.bat)

2.wmic中对原系统变量值的引用问题

例如:

对系统原Path变量的值进行了引用

::更新变量path,加入新值C:\Program Files\Java\jdk1.5.0_07\bin

wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%path%C:\Program Files\Java\jdk1.5.0_07\bin"

若用上面的顺序进行%path%的引用,即%path%C:\Program Files\Java\jdk1.5.0_07\bin,%path%在增量之前,

增量C:\Program Files\Java\jdk1.5.0_07\bin之前需要要加分号,否则系统不会自动为其加上。

运行后效果如下:

若下面的顺序的进行%path%的引用,即%JAVA_HOME%\bin%path%

::更新变量path,加入新值%JAVA_HOME%\bin

wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%JAVA_HOME%\bin%path%"

%path%在增量之后,增量%JAVA_HOME%\bin的后面要加一个分号,否则系统不会自动为其加上。

运行后效果如下:

C:\Program Files\Java\jdk1.5.0_07\binC:\WINDOWS\system32C:\WINDOWSC:\WINDOWS\System32\Wbem

总结:无论增量与原变量引用之间先后顺序如何,他们之间都要添加分号进行分隔。

author:lioncode

date:2010/11/23 17:54

version:0.0.1

文件2:JDK_Environment.bat

位置:JDK_Environment 文件夹

内容:

::创建变量JAVA_HOME,值为C:\Program Files\Java\jdk1.5.0_07

wmic ENVIRONMENT create name="JAVA_HOME",username="<system>",VariableValue="C:\Program Files\Java\jdk1.5.0_07"

::更新变量path,加入新值C:\Program Files\Java\jdk1.5.0_07\bin

wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%path%C:\Program Files\Java\jdk1.5.0_07\bin"

::创建变量CLASSPATH,VariableValue等号后为其值。

wmic ENVIRONMENT create name="CLASSPATH",username="<system>",VariableValue=".C:\Program Files\Java\jdk1.5.0_07\lib\dt.jarC:\Program Files\Java\jdk1.5.0_07\lib\tools.jarC:\Program Files\Java\jre1.5.0_07\lib\rt.jar"

文件3:JDK_Env_Step1.bat

位置:JDK_Environment /Step 文件夹

内容:

::创建变量JAVA_HOME,值为C:\Program Files\Java\jdk1.5.0_07

wmic ENVIRONMENT create name="JAVA_HOME",username="<system>",VariableValue="C:\Program Files\Java\jdk1.5.0_07"

文件4:JDK_Env_Step2.bat

位置:JDK_Environment /Step 文件夹

内容:

::更新变量path,加入新值%JAVA_HOME%\bin

wmic ENVIRONMENT where "name='path' and username='<system>'" set VariableValue="%JAVA_HOME%\bin%path%"

::创建变量CLASSPATH,VariableValue等号后为其值。

wmic ENVIRONMENT create name="CLASSPATH",username="<system>",VariableValue=".%JAVA_HOME%\lib\dt.jar%JAVA_HOME%\lib\tools.jarC:\Program Files\Java\jre1.5.0_07\lib\rt.jar"

==========================================================================================

下面是网阅的其他朋友解决此问题主要的几种方案,在此也给出大家作为参考。

理论阐述性技术贴:

详解Windows不重启使环境变量修改生效(经典)

在“我的电脑”->“属性”->“高级”->“环境变量”中增加或修改环境变量后,需重启系统才能使之生效。有没有什么方法可让它即时生效呢?下面介绍一种方法:

以修改环境变量“PATH”为例,修改完成后,进入DOS命令提示符,输入:set PATH=C: ,关闭DOS窗口。再次打开DOS窗口,输入:echo %PATH% ,可以发现“我的电脑”->“属性”->“高级”->“环境变量”中设置的 PATH 值已经生效。

不用担心DOS窗口中的修改会影响环境变量的值,DOS窗口中的环境变量只是Windows环境变量的一个副本而已。但是对副本的修改却会引发Windows环境变量的刷新,这正是我们想要的!

诡异啊,使用win+R->cmd 启动的cmd.exe 会发现在电脑属性中设置的环境变量立马生效了,在其他模式下启动的cmd却没有发生效果,怪哉!!查看了一下资料,在电脑属性中设置环境变量以后,以后启动的程序和线程会生效,而对以前驻留内存的程序不起作用,也有人说kill explorer.exe 再启动explorer.exe 可以激发设置其作用。

这里要理解的是,一个程序启动时,环境变量被复制到该程序所在的环境中,在该程序执行过程中不会被除该程序以外的其他程序所改变。也就是说,假设我们启动了一个cmd程序,然后通过控制面板修改了环境变量设置,但是已经启动了的cmd所拥有的环境变量并不会被改变。如果我们在修改环境变量之后启动cmd程序,则该程序将拥有新的环境变量。

那么结论就很明显了:修改环境变量之后,如果受影响的是应用程序,那么只要简单地重新启动此应用程序,环境变量的修改就会反映到该程序中,而不必重新启动计算机;但是,如果受影响的是系统服务,就必须重新启动才能将环境变量的修改反映到系统服务中(因为没有办法在不重启计算机的情况下重新启动系统服务管理器)。

方案一:修改注册表,并向系统广播消息

修改Windows环境变量后不重新启动使之立即生效的方法

不少程序需要添加各自的环境变量,方便定制性使用。用得最多的是用户指定目录如JAVA_HOME等变量,程序中可以根据获取变量%JAVA_HOME%,来获取对应设置的字符串。

一般做法是安装的时候就指定,或者程序中设定。

用批处理临时设置环境变量就不提了,这里讲让环境变量始终生效。

一般做法是修改环境变量注册表。

整个Windows都有效的环境变量在

HKEY_LOCAL_MACHINESYSTEMControlSet001ControlSession ManagerEnvironment

中设置

对当前用户有效的环境变量在

HKEY_CURRENT_USEREnvironment

中设置

其实只是简单的元数据

但往往修改玩后无法即时生效,往往需要重启系统。

要解决即时生效的问题,可以再在我的电脑属性中设置环境变量中确定一下即可。

依此看来,这个过程肯定是读取了注册表,再调用一个系统函数来更新整个系统的变量。一定可以编程解决的。

可惜网海茫茫,收不到。

一不做二不休,直接下载打开innosetup的代码,搜索Environment,果真找到了。

很简单:

SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0,LPARAM("Environment"), SMTO_ABORTIFHUNG, 5000, &MsgResult)

发一个全局的广播,等待各自相应后,立即生效。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11836401.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存