不合理的「;“正在使用的文件”;在WiX安装过程中

不合理的「;“正在使用的文件”;在WiX安装过程中,wix,windows-installer,installation,Wix,Windows Installer,Installation,我使用WiX为一个应用程序构建了一个安装程序(MSI),它工作得很好,除了不合理数量的“使用此设置需要更新的文件的应用程序”: 这种情况有时会发生在一些用户身上,我不太明白为什么会发生这种情况,以及如何修复它 我不认为我的应用程序的安装过程会与所有这些应用程序发生冲突,我也不知道如何进一步调查 我的应用程序是一个独立的桌面应用程序-不是任何附加组件或与列出的任何应用程序交互或依赖的东西 我的安装过程包括以下步骤: 检查.Net framework 4.0 CP是否可用(如果不可用,请退出) 在

我使用WiX为一个应用程序构建了一个安装程序(MSI),它工作得很好,除了不合理数量的“使用此设置需要更新的文件的应用程序”:

这种情况有时会发生在一些用户身上,我不太明白为什么会发生这种情况,以及如何修复它

我不认为我的应用程序的安装过程会与所有这些应用程序发生冲突,我也不知道如何进一步调查

我的应用程序是一个独立的桌面应用程序-不是任何附加组件或与列出的任何应用程序交互或依赖的东西

我的安装过程包括以下步骤:

  • 检查.Net framework 4.0 CP是否可用(如果不可用,请退出)
  • 在程序文件[公司][产品]下安装应用程序(包括我的exe、我的DLL、我捆绑的2个第三方DLL)
  • 安装MS VisualC++运行时ReDIST 14(如果需要的话
  • 为应用程序添加“开始”菜单项(启动和卸载快捷方式)
  • 用于创建计划任务的自定义操作,该任务在用户以管理员身份登录时启动我的应用程序(应用程序以管理员身份在任务栏中运行)
  • 安装程序完成后启动应用程序的自定义操作(如果在上一个对话框中选中了复选框)

  • 任何关于如何修复此问题的建议,或者至少调查导致此问题的原因,都将不胜感激:-)

    只有在您运行安装程序并且桌面应用程序已经运行时才会发生这种情况吗

    要进一步研究这一点,最好查看日志文件。日志文件将包含其他进程所持有的文件的详细信息,如:

    Info 1603. The file C:\...\abc.exe is being held in use by the following process: Name: xyz, Id: 19010, Window Title: 'xyz'. Close that application and retry.
    Info 1603. The file C:\...\abc.dll is being held in use by the following process: Name: xyz123, Id: 9243, Window Title: 'xyz123'. Close that application and retry.
    

    一旦确定其他进程使用的实际文件,它将帮助您找出根本原因。基本上,windows installer操作确定活动进程当前是否正在使用一个或多个要覆盖或删除的文件。如果任何文件在运行期间被任何进程打开以供执行或修改时被覆盖或删除,则会将条目添加到内部FilesInUse表中。FilesInUse表包含文件名和完整路径的列。执行InstallValidate操作时,安装程序会查询FilesInUse表中的条目,并确定使用该文件的进程的名称。InstallValidate操作将此查询标识的每个唯一进程的一条记录添加到ListBox用户界面表中。

    是否只有在运行安装程序且桌面应用程序已在运行时才会发生这种情况

    要进一步研究这一点,最好查看日志文件。日志文件将包含其他进程所持有的文件的详细信息,如:

    Info 1603. The file C:\...\abc.exe is being held in use by the following process: Name: xyz, Id: 19010, Window Title: 'xyz'. Close that application and retry.
    Info 1603. The file C:\...\abc.dll is being held in use by the following process: Name: xyz123, Id: 9243, Window Title: 'xyz123'. Close that application and retry.
    

    一旦确定其他进程使用的实际文件,它将帮助您找出根本原因。基本上,windows installer操作确定活动进程当前是否正在使用一个或多个要覆盖或删除的文件。如果任何文件在运行期间被任何进程打开以供执行或修改时被覆盖或删除,则会将条目添加到内部FilesInUse表中。FilesInUse表包含文件名和完整路径的列。执行InstallValidate操作时,安装程序会查询FilesInUse表中的条目,并确定使用该文件的进程的名称。InstallValidate操作将此查询标识的每个唯一进程的一条记录添加到ListBox用户界面表中。

    感谢所有详细信息:-)不,到目前为止,这只发生在初始安装期间,即安装或运行应用程序之前。可能是因为MS VisualC++运行时合并模块吗?可能是我的安装程序正在替换它,而所有这些应用程序都受到它的影响吗?我会尝试在日志中寻找线索-只是抛出一个猜测:-YUP,我认为这是一个有良好的猜测,C++运行时ReDIST可能是根本原因。到目前为止,没有问题,用日志启用的问题:-(在C++运行时ReDeT是根本原因,我能做什么来处理它?我遵循WIX如何安装它)。是否已安装redist?如果已安装,请将其删除,然后重试。尝试删除redist并多次运行安装程序,但没有引发问题…最终完全放弃对它的依赖性…感谢所有详细信息:-)不,到目前为止,这只发生在初始安装期间,在我的应用程序安装或运行之前。可能是因为MS VisualC++运行时合并模块吗?可能是我的安装程序正在替换它,而所有这些应用程序都受到它的影响吗?我会尝试在日志中寻找线索-只是抛出一个猜测:-YUP,我认为这是一个有良好的猜测,C++运行时ReDIST可能是根本原因。到目前为止,没有问题,用日志启用的问题:-(在C++运行时ReDeT是根本原因,我能做什么来处理它?我遵循WIX如何安装它)。是否已安装redist?如果已安装,请将其删除,然后重试。尝试删除redist并多次运行安装程序,但没有引发问题…最终完全放弃对它的依赖关系。。。