我目前正在调查我们目前正在使用的安装包(Wise Installer 9),并转向处理Windows Vista,Windows 7和64位系统之类的东西.安装人员的本地化将是有益的,因为我们也有许多加拿大法国客户.
我们目前使用以下技术安装软件包和实用程序:
我已经看过WiX和InstallShield,Altiris还替换了旧的Wise系统.
我还没有玩过很多关于InstallShield的东西,但是从我见过/安装过的所有东西来看,它似乎都是业界的最爱之一.我浏览了一些与InstallShield相关的Stack Overflow标签,我很想知道该组织对此有何看法.
我是否只是默认情况下去找他们?WiX在非.NET的东西有多好?
installer windows-installer installshield wix advanced-installer
我找到了一个关于注册DLL的示例,使用Windows Installer XML工具集在MSI文件中注册COM Interop的程序集.,和WiX抱怨"AssemblyRegisterComInterop"属性.
我删除了它并将"Assembly"属性更改为win32,它说我需要指定AssemblyManifest属性,但是我应该放在那里?
如何避免WiX/MSI部署解决方案中的常见设计缺陷?
部署是大多数开发的关键部分 - 部署失败意味着您的最终用户永远无法评估您的产品.这很容易成为软件开发中最昂贵的错误.请给这个内容一个机会.我坚信,通过应用程序设计的微小变化可以显着提高软件质量,使部署更加合理,更可靠 - 这就是"答案"的全部 - 软件开发.
这是一个Q/A风格的问题,答案只列出了MSI文件中不要做的一些事情,以避免最常见的设计缺陷.
windows-installer installshield wix advanced-installer installshield-le
在我迄今为止编写的所有程序中,如果我希望它在另一个工作站上工作,我只需复制并粘贴使其运行所需的可执行文件和必要文件(例如:.o文件,二进制文件......).
但是所有为商业用途而构建的程序总是带有安装程序.例如PC游戏.所以我的问题是:当我们只是将文件复制到目标工作站时,安装的主要好处/原因是什么?
- 其中一个原因可能是防止盗版.但除此之外,我确定还有其他更强的理由吗?
我有一个非常简单的安装程序 - 将一个DLL复制到Program Files子文件夹并使用regsvr32.exe注册它.效果很好,但是如果安装了旧版本的dll,"修复"不会覆盖现有的dll.dll已签名,其版本(构建)编号始终递增(例如2.0.0.123 - > 2.0.0.124).
查看以前的类似帖子,我添加了RemoveExistingProducts并将ProductId指定为"*".卸载然后安装新版本工作正常,但我真的需要修复来更新现有的dll.
还有什么我需要做的吗?
谢谢!
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
<!--
When creating a new install for the next version, these fields must be modified
-->
<?define ProductVersion = "2.0.00" ?>
<?define ProductId64 = "*" ?>
<?define ProductId32 = "*" ?>
<?define PackageId = "45F34788-66AC-441C-B666-707FFA7F1EE9" ?>
<!-- Product name as you want it to appear in Add/Remove Programs-->
<?if $(var.Platform) = x64 ?>
<?define ProductName = "XYZ (64 bit)" ?>
<?define Win64 = "yes" …Run Code Online (Sandbox Code Playgroud) 我编写了一个通过WIX生成的MSI分发的COM组件.
COM组件具有相当复杂和非静态的注册逻辑,这意味着直接在Windows Installer WXS文件中嵌入注册信息不是一个可行的选项 - 注册必须使用regsvr32- 并且它是一个32位的COM组件,所以它必须使用32位版本regsvr32.exe- %SystemRoot%\SysWow64\regsvr32.exe在64位Windows或%SystemRoot%\System32\regsvr32.exex86 Windows上.
我注意到WIX与这个WXS XML有两个问题:
<InstallExecuteSequence>
<Custom Action="COMRegister" After="InstallFinalize">NOT Installed</Custom>
<Custom Action="COMUnregister" After="InstallInitialize">Installed</Custom>
</InstallExecuteSequence>
<CustomAction Id="COMRegister" Directory="APPLICATIONROOTDIRECTORY" ExeCommand='regsvr32.exe /s "[APPLICATIONROOTDIRECTORY]Component.dll"' />
<CustomAction Id="COMUnregister" Directory="APPLICATIONROOTDIRECTORY" ExeCommand='regsvr32.exe /s /u "[APPLICATIONROOTDIRECTORY]Component.dll"' />
Run Code Online (Sandbox Code Playgroud)
regsvr32.exe引用了错误.我注意到x64版本resgvr32.exe是在64位系统而不是32位版本上运行的.regsvr32.exe在没有提升权限的情况下运行,因此COM注册失败E_ACCESSDENIED.对于1.它可以工作,如果我硬编码regsvr32.exe可执行文件的路径使用[WindowsFolder]\SysWOW64\regsvr32.exe,但这SysWow64不适用于不存在的真正的32位机器.
对于2.我在线阅读更改After="InstallFinalize" toAfter ="RemoveExistingProducts" would cause it to run with elevated permissions, however instead this just gives me errors aboutRemoveExistingProducts`是一个未解析的符号名称.
我该如何解决这两个问题?
(在过去2小时内遇到这个问题后,我确信WIX的作者是HP …
wix ×7
installer ×3
com ×1
deployment ×1
dll ×1
installation ×1
regsvr32 ×1
resiliency ×1
wix3 ×1