Wix 在用户文件夹中创建.config文件夹

Wix 在用户文件夹中创建.config文件夹,wix,windows-installer,Wix,Windows Installer,安装程序时,我想在用户文件夹中创建一个.config文件夹。 例如: C:\Users\MyUser\.config 这是我尝试过的,但不起作用: <Directory Id="USERPROFILEFOLDER" Name="[%USERPROFILE]"> <Directory Id="ConfigUserFolder" Name=".config"> <Directory Id="UserConfig" Name="Config" >

安装程序时,我想在用户文件夹中创建一个
.config
文件夹。 例如:

C:\Users\MyUser\.config
这是我尝试过的,但不起作用:

<Directory Id="USERPROFILEFOLDER" Name="[%USERPROFILE]">
 <Directory Id="ConfigUserFolder" Name=".config">
   <Directory Id="UserConfig" Name="Config" >
     <Component Id="ConfigFolder" Guid="GUID">
       <RemoveFolder Id='RemoveConfig' Directory='UserConfig' On='uninstall' />
       <RemoveFolder Id='RemoveConfigUserFolder' Directory='ConfigUserFolder' On='uninstall' />
       <RegistryValue Root='HKCU' Key='Software\MySoftware' Type='string' Value='' KeyPath='yes' />
     </Component>
  </Directory>
 </Directory>
</Directory>

<Property Id="USERPROFILEFOLDER" />


知道我遗漏了什么/做错了什么吗?

此应用程序是常规可执行文件吗?或者某种Web应用程序或插件?换句话说:它有自己的发射序列吗

我的建议听起来像是打破了记录,但是:用户配置文件文件夹(和HKCU设置)中的文件夹和文件最好在应用程序启动时创建,而不是在安装过程中创建

只需将此结构从您的设置中删除,使您的应用程序更智能,能够在启动时为每个用户创建此文件夹,并能够将任何数据文件从主只读
%ProgramFiles%
安装文件夹中的模板位置复制到该文件夹中

我以前写过一篇关于用户特定文件和设置部署问题的长篇大论:。我描述了一些选项,如MSI自我修复和活动设置,并列出了一些关于它们不可靠原因的详细信息(并提出了一些可能更好的方法)

我会说:消除复杂性和错误源尽可能呆在熟悉的领域。避免使用高级安装功能,因为这些功能很难调试,而且非常复杂以及与您的问题相关的内容:避免通过安装程序进行每用户部署


上述内容基本上就是要说的全部内容,但这里要具体说明的是使用应用程序启动序列而不是按用户设置的主要原因:

  • 可预测性和可靠性:此方法可为启动应用程序的任何用户可靠地创建文件夹,而无需依赖Windows Installer将每个用户的文件和文件夹放置到位

    • 策略可以阻止Windows Installer自修复在某些计算机(例如终端服务器)上运行,这样就永远不会为未运行原始安装的用户创建文件夹

    • 如果您还希望安装特定于用户的文件(不仅仅是文件夹),那么用户指定的文件和设置的MSI部署最多是不可靠的,并且容易意外地覆盖文件和设置(-force overwrite),并且由于意外卸载要永久保存的设置文件而导致用户设置和数据丢失,但没有(偶然地)标记为这样。这会导致很多问题

    • 非常技术性,但MSI的组件GUID概念在用于引用可能多次安装的计数文件时在概念上有点崩溃

  • 实现和调试:应用程序启动顺序是“普通代码”,而Windows Installer和部署对于许多开发人员来说可能是陌生的领域。因此,您可以避免由于以下原因导致的意外问题(WiX历史中编写的关于部署复杂性的简介)

    • 如果您进入定制操作,其复杂的顺序、模拟和调节方面具有非常“阴谋复杂性”(这些问题不是很明显,但在最不方便的时候会出现),这一点尤其正确

    • 您的应用程序启动序列具有可预测的用户上下文、对用户环境的完全访问以及带有错误和警告消息的交互性。只需重新启动应用程序即可轻松调试问题,而不是编译和运行安装程序(在自定义操作的情况下附加调试器,这远远超出了问题的范围)

    • 您可以避免安装程序的“一次性”性质和调试的困难,因为部署错误总体上很难重现(无法访问有问题的系统,通常缺少日志记录,难以清除以前的错误)。对于启动序列,您只需让用户重新启动应用程序并报告所看到的错误,或者检查事件日志或任何其他可用的日志

    • 根据我的经验,QA人员通常在测试应用程序启动序列方面比部署功能方面有更多的经验

    • 我可能会让应用程序调试听起来“过于乐观”,与现实世界中的情况相比,但相信我,这确实比部署调试更容易

  • 设置管理:应用程序的启动顺序可以(更)可靠地对数据和设置文件执行任何形式的“维护”,而这是通过设置无法可靠完成的

    • 这些文件通常是“资源文件”,而不是数据文件——换句话说,程序运行期间使用的模板和设置——不仅仅是用户创建的内容(有时还需要“清理”——但您可以在打开文件而不是启动应用程序时进行清理)

    • 您希望修复为每个用户复制的文件中的某些内容

      • 泄露元数据文件和图片
      • 数据文件错误和故障
      • 只是每用户设置引起的bug真的
    • 强制执行新的强制设置
      • 将文件移动到新位置或进行备份
      • 删除不再有效(或错误地未加密)的设置
      • 从HKCU删除导致应用程序崩溃的二进制流
    • 说明安装程序如何“标记”系统以激活应用程序的“启动序列维护功能”:(2019年2月转换为回送机器链接)
  • 安装程序本质上应该做任何需要提升权限的事情,大多数其他事情——在应用程序中进行——并且某些提升的事情实际上可以随着时间的推移而完成