Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Properties 在卸载日志中找不到WiX属性_Properties_Wix_Uninstallation_Windows Installer - Fatal编程技术网

Properties 在卸载日志中找不到WiX属性

Properties 在卸载日志中找不到WiX属性,properties,wix,uninstallation,windows-installer,Properties,Wix,Uninstallation,Windows Installer,UI中的属性更改将从卸载日志中消失 如果使用默认属性值安装应用程序,然后运行卸载,则卸载日志中将显示该属性 如果我在卸载时从UI更改属性值,它不会显示在日志中 这就是为什么卸载后apppool和webapp仍保留在IIS中的原因,默认值的情况并非如此 这就是房产的外观 这是我从UI控件添加值的地方 <Control Id="PoolNameEdit" Type="Edit" X="100" Y="45"

UI中的属性更改将从卸载日志中消失

如果使用默认属性值安装应用程序,然后运行卸载,则卸载日志中将显示该属性

如果我在卸载时从UI更改属性值,它不会显示在日志中

这就是为什么卸载后apppool和webapp仍保留在IIS中的原因,默认值的情况并非如此

这就是房产的外观

这是我从UI控件添加值的地方

    <Control Id="PoolNameEdit"
             Type="Edit"
             X="100"
             Y="45"
             Width="160"
             Height="17"
             Property="WEB_APP_NAME"
             Text="{80}"
             Indirect="no" />
这就是默认卸载日志的样子,如果我将WEB_APP_名称更改为其他名称,则在上面可以看到的卸载日志中找不到WEB_APP_名称


感谢任何能解决这个问题的想法

这里要理解的关键是Windows Installer不保存属性值。用户输入的值(通过UI或通过命令行参数)在修复、升级或卸载期间将不可用。您可以想象,在卸载过程中它是可用的,这是一个简单的问题,但这就是windows installer的工作方式。绕过此问题的最简单解决方案是读取属性,然后将其写入注册表。在修复/卸载/升级过程中,执行注册表搜索并根据注册表中的内容使用该值

至于为什么在卸载期间保留默认值,那是因为初始/默认值被添加到MSI中。卸载过程中也会从属性表中使用相同的值

注意:请至少在卸载期间防止属性被更改。我认为你应该只接受工作期间的变化 新安装?还是主要升级?否则,解析的目录名与安装的目录名不匹配(与您最初遇到的问题相同)

持久化属性:当允许在安装GUI中或通过命令行显示和更改相关属性时,需要持久化这些属性。否则,当解析为目录或应用程序名时,属性将为空,或者解析为您在设置中使用它们的任何容量。持久化MSI属性不是Windows Installer的内置功能(只有少数系统属性会自动持久化)。通常是MSI反模式,但事实就是这样

“记住模式”示例:对于常规的公共属性(大写属性),您可以使用它保存和检索属性值,以进行修复、修改、卸载和其他维护操作。这里有一个使用此属性持久性模式的小示例:(记住使用中的模式)


安装模式:进行设置时,有许多安装模式需要检查:
新安装
修复
修改
自修复
卸载
主要升级卸载
修补
回滚
恢复暂停
(重新启动和其他原因)等。。。我将至少测试前6种类型-以确保解析正常工作。

AFAIR卸载期间无法更改组件的文件夹,因为所有这些文件夹都已缓存。其中的文件夹和文件已成功删除,但appool和网站名称未被删除。卸载default和not default insall的区别在于,在非默认安装后,卸载日志中缺少属性
WEB\u APP\u NAME
,因此我认为这就是问题所在,因为默认卸载时,该属性存在。。。?所以为什么它被移除是我想要的?或者问题是如何正确缓存该属性?在属性赋值时日志中发生了什么?
MSI(c)(DC:F4)[15:49:24:244]:属性更改:修改WEB\u APP\u NAME属性。其当前值为“WebApp”。它的新值:“WebsiteName”。
同样的情况发生在[15:49:37],然后它被列在安装日志的底部。我现在可以在卸载日志中看到该属性,但是它具有默认值
属性:WEB\u APP\u NAME=WebApp
。所以看起来更改尚未注册?并且可以用于此目的。我想知道他是否允许在卸载GUI中更改名称-这不太好。从文字上看不太清楚。但是为什么所有的事情都像预期的那样发生在预定义的(硬编码的)属性值上呢?当我从UI或cmd更改它们时。。它们仅在该点有效。我还有一个“摘要”对话框,列出了在继续安装之前要检查和验证的属性值,它们在这一点上看起来还不错。。但卸载时返回默认值。。?仍然无法理解该控件是什么..因此无法从UI更新MSI属性表?因此,如果添加初始道具值,它们的更改会发生什么变化,就被丢弃?这看起来很奇怪?!初始值是在创建Msi时添加的,也就是在创建该Msi的属性表时添加的。我已经告诉你了问题和解决办法。编写注册表只需要几行代码。您还需要阅读更多有关MSI、windows installer的信息,以了解基本知识。@SteinÅsmul如果您可以添加您的评论作为答案,我将标记它。谢谢大家的帮助,我非常固执地接受这是唯一的办法,因为这对我来说似乎仍然不符合逻辑,但在我使这些特性持久化之后,所有这些都按照我的要求工作,我非常高兴。。非常感谢。
<!-- Define the directory structure -->
  <Fragment>

    <!--Directory elemens hierarchy always starts with Id="TARGETDIR" Name="SourceDir"-->
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="WEB_APP_FOLDER_LOC" Name="WebInstaller">
        <Directory Id="WEBFOLDER" Name ="[WEB_APP_NAME]" />
      </Directory>
    </Directory>
  </Fragment>

  <Fragment>

    <!--Concatenate user input for folderpath-->
    <SetDirectory Id="WEBFOLDER"
                  Value="[WEB_APP_FOLDER_LOC][WEB_APP_NAME]"
                  Sequence="both" />

    <!--Create new folder-->
    <DirectoryRef Id="WEBFOLDER">
      <Component Id="cmp_WebDir"
                 Guid="{E0CE5051-1419-4997-949F-020BC814ECDA}"
                 KeyPath="yes">
        <CreateFolder />
      </Component>
    </DirectoryRef>

    <!--Components-->
    <ComponentGroup Id="ProductComponents" Directory="WEBFOLDER">

      <!--Client config-->
      <Component Id="cmpWebConfig"
                 Guid="{1C84DF1F-2EA4-46E6-8125-C6FD410AFED9}"
                 KeyPath="yes">
        <Condition>INCLUDECONFIGFILE="1"</Condition>
        <File Source="Configuration\Web.config" />
      </Component>

      <!--Application pool-->
      <Component Id="cmpAppPool"
                 Guid="{00D6ABB1-734F-4788-ADB8-12A30056C513}"
                 KeyPath="yes">

        <iis:WebAppPool Id="MyAppPool"
                        Name="[WEB_APP_NAME]"
                        ManagedRuntimeVersion="v4.0"
                        ManagedPipelineMode="integrated"
                        Identity="applicationPoolIdentity" />
      </Component>

      <!--Website-->
      <Component Id="cmpMyWebsite"
                 Guid="{ECD42015-C067-44F3-94D9-5E713BCB586D}"
                 KeyPath="yes">

        <iis:WebSite Id="website_MyWebsite"
                     Description="[WEB_APP_NAME]"
                     Directory="WEBFOLDER"
                     ConfigureIfExists="no">

          <iis:WebApplication Id="webapplication_MyWebsite"
                              Name="[WEB_APP_NAME]"
                              WebAppPool="MyAppPool" />

          <iis:WebAddress Id="webaddress_MyWebsite"
                          Port="[WEB_APP_PORT]" />
        </iis:WebSite>
      </Component>
Property(S): VirtualMemory = 3353
Property(S): UpgradeCode = {A4F9CA9E-4135-4D6F-AF58-FADA49E265DA}
Property(S): ConfigureIIs7Exec = **********
Property(S): StartIIS7ConfigTransaction = **********
Property(S): RollbackIIS7ConfigTransaction = **********
Property(S): CommitIIS7ConfigTransaction = **********
Property(S): WriteIIS7ConfigChanges = **********
Property(S): NETFRAMEWORK45 = #461808
Property(S): WEBFOLDER= C:\inetpub\WebApp\
Property(S): WEB_APP_FOLDER_LOC = C:\inetpub\
Property(S): WEB_APP_NAME = WebApp
Property(S): WEB_APP_PORT = 8080
Property(S): WEB_APP_USERNAME = ******
Property(S): WEB_APP_DOMAIN_NAME = ******
Property(S): WEB_APP_SQLSERVER_NAME = ******
Property(S): INCLUDECONFIGFILE = 1