无法使用WIX更新“PATH”环境变量

时间:2012-07-09 18:16:25

标签: installer wix windows-installer wix3.5

我使用了以下wix片段来更新“PATH”环境变量。

<DirectoryRef Id="MyDir">
   <Component Id ="setEnviroment" 
                           Guid=" xxxxx">
            <CreateFolder />
             <Environment Id="SET_ENV"
                                       Action="set"                                                                                          
                                         Name="PATH"
                                        Part="last"       
                                       Permanent="no" 
                                        System="yes" 
                         Value="[INSTALLLOCATION]" />
       </Component>
</DirectoryRef>
<Feature Id="Feature3" Title="3Feature"   
             Level="1" 
              Absent="disallow"
               AllowAdvertise="no">
           <ComponentRef Id="setEnviroment"/>
</Feature>
<InstallExecuteSequence>
    <WriteEnvironmentStrings/>
<InstallExecuteSequence/>

这最初是有效的,但现在它不会更新环境变量。 详细日志显示此操作的执行并返回值1。 重启机器后检查。 在功能日志FeaturePublish For Feature3中,存在垃圾值,但安装成功。 请求你的帮助...... 非常感谢....

2 个答案:

答案 0 :(得分:12)

我认为您正在使用INSTALLLOCATION,意思是使用INSTALLDIR。这是一个工作示例,它使用新应用程序的安装目录更新PATH环境var。

<Environment 
  Id="PATH" 
  Name="PATH" 
  Value="[INSTALLDIR]" 
  Permanent="yes" 
  Part="last" 
  Action="set" 
  System="yes" />

如果打算使用INSTALLLOCATION,并在其他地方定义,那么请发布剩下的代码,我们将进一步深入兔子洞。

答案 1 :(得分:0)

我需要使用INSTALLFOLDER来使其正常工作。

restore: {
             conditions: function() {
               var
                 animation = module.get.currentAnimation();
               if (animation) {
                 $module
                   .removeClass(animation);
                 module.verbose('Removing animation class', module.cache);
               }
               module.remove.duration();
             }
           },

           add: {
             failSafe: function() {
               var
                 duration = module.get.duration();
               module.timer = setTimeout(function() {
                 $module.triggerHandler(animationEnd);
               }, duration + settings.failSafeDelay);
               module.verbose('Adding fail safe timer', module.timer);
             }
           },

           remove: {
             animating: function() {
               $module.removeClass(className.animating);
             },
             animationCallbacks: function() {
               module.remove.queueCallback();
               module.remove.completeCallback();
             },
             queueCallback: function() {
               $module.off('.queue' + eventNamespace);
             },
             completeCallback: function() {
               $module.off('.complete' + eventNamespace);
             },