我有一个InstallShield安装,它使用依赖于Visual C++ Runtime 8.0 sp1的自定义操作.在过去,我能够使用Microsoft提供的合并模块和Visual Studio安装运行时.基于Visual C++ Runtime 8.0 sp1并行安装在Vista上的工作方式,在安装的提交顺序之前,不能使用运行时.
这意味着我必须将自定义操作的执行移动到提交序列(不合需要,因为如果出现问题,在此序列中无法回滚安装)或者在安装之前使用InstallShield先决条件安装Visual C++ Runtime .
我更愿意安装Visual C++ Runtime作为先决条件,但InstallShield不提供此先决条件,因此我必须自己编写.我能够弄清楚如何配置安装运行时的先决条件,但我不知道如何确定它是否已经安装.是否有我可以检查的注册表项或文件版本来确定这个?
我们的应用程序使用一个组件,该组件在我们的可执行文件的目录中需要一个许可证文件,它恰好是一个.NET WinForms应用程序,尽管我认为这个问题并不重要.当安装在某些XP专业版机器上时(目前为止只有几百个中的三个),该组件会抛出许可证异常.因此,我重新生成了许可证文件并将其发送给组件供应商(EMC Captiva),供应商声称该错误是由于"Users"组对该文件没有读取权限.遇到错误的用户恰好是本地管理员,但除此之外,我仍然对更一般的问题感到好奇.
所以我的问题是,ACL是否存储在一个文件中,以便它们在整个生命周期中都遵循该文件,特别是在我的开发机器(机器1)上生成许可文件,存储在Subversion(机器2)中,从源代码控制中检出由TeamCity(机器3),由InstallShield(机器4)打包到安装程序中,最后部署到客户机器(机器5),由管理员安装它?在我的开发机器(机器1)上生成文件后,通过其支持站点(机器2)将其上载到组件供应商,然后支持人员将其下载到他们的机器上进行检查(机器3)?
我不确定这一点(这就是我在这里问的原因),但我假设每台Windows机器都将ACL存储在NTFS管理的某个中心目录/ list/table中,而不是存储在文件中.当原始文件的ACL从一台机器复制到另一台机器,存储在Subversion中,打包成MSI等时会发生什么?有人能指出一些我可以阅读的好参考资料吗?
Visual Studio Installer声明将每个文件安装为安装程序组件是最佳做法.Wix提供的热效用似乎也遵循将每个文件放在其自己的组件中的做法.
InstallShield的组件向导使用InstallShield的设置最佳实践,即将可移植可执行文件放在它们自己的组件中,但是将公共目标文件夹中的所有其他文件(例如,未版本控制的文件)组合在一起.
练习1(每个文件在其自己的组件中)的优点是每个文件都设置为密钥文件,如果您希望这些文件触发修复,这很重要.由于您要为每个文件创建组件,因此它还允许自动创建组件(例如加热).
练习1的缺点包括管理这么多组件的开销以及安装应用程序后注册表的膨胀.
在将数百个图形文件安装到一个目录的安装中可以看到练习2的优点.如果您不关心修复功能,是否有任何理由为此安装创建数百个组件?
这两种不同的做法是相互矛盾的,我想知道人们实际使用哪一种以及为什么.
我正在使用InstallShield 2011.我有一个需要在安装期间注册的COM对象.我似乎无法找到指示你如何做到这一点的任何地方.有没有人有任何想法?
谢谢
编辑:

我正在制作自己的prq文件,以便在安装WPF应用程序的情况下执行SQL CE 4.0安装.安装程序一直在失败,我不知道为什么.看起来它试图运行CE exe,但随后Windows Installer帮助窗口会出现所有这些命令行帮助选项.我单击确定,然后它说CE的安装失败.我不知道如何确定出了什么问题.
这是我的prq文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<SetupPrereq>
<conditions>
<condition Type="32" Comparison="2" Path="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Compact Edition\v4.0\ENU" FileName="DesktopRuntimeVersion" ReturnValue="4.0.8482.1"></condition>
</conditions>
<files>
<file LocalFile="<ISProductFolder>\SetupPrerequisites\SSCERuntime_x86-ENU.exe" URL="http://www.microsoft.com/download/en/details.aspx?id=17876" FileSize="0,0"></file>
</files>
<execute file="SSCERuntime_x86-ENU.exe" cmdline="/passive /norestart" cmdlinesilent="/passive /norestart"></execute>
<properties Id="{F7BF54C1-CA2C-4410-98DB-480769CE6547}" Description="This prerequisite installs the Microsoft SQL Server Compact 4.0."></properties>
</SetupPrereq>
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激.
我正在使用InstallShield 2009为C#程序创建一个安装包,该程序将部署在许多客户端站点上,每个站点都有数百个工作站.当我们发布一个补丁时,我根本无法去每个工作站手动升级,而且用户和婆罗洲野人一样精通计算机,所以我当然不会依赖每个操作员来处理他自己的升级.
Microsoft使用ClickOnce非常好地处理这个要求,但由于我的安装非常简单,并且已经使用InstallScript编写,我想将自动升级功能添加到我的InstallShield项目......如果,确实这是可能的.
遗憾的是,我在关于这个主题的帮助文档中找不到任何内容.也许我在寻找错误的关键词.
InstallShield是否支持自动升级?如果是这样,请提供其在线文档的链接,其中说明了如何操作.
谢谢!
我想在安装后使用InstallShield运行我的exe.InstallShield正确完成设置但不运行exe.
我找到了另一种在启动时添加exe的方法,但它在重启后运行.我希望它能在不重启的情况下运行.
可能吗 ?
我得到了别人制作的Visual Studio解决方案.它有一个使用Installshield LE的安装程序项目.安装程序构建正常,但它生成一个exe,我应该做一个msi.我知道编写该项目的人会生成msi文件,但我没有看到任何选项.这对LE有用吗?
我们在Installshield上遇到了一个奇怪的问题.
我正在使用Installshield在DEV和QUAL环境(同一台机器)上安装Windows服务.配置文件是相同的(.isl,.isproj和.vspscc),但是当我们进行卸载时,我们遇到了一些不同的行为.
当我们卸载QUAL服务(它们具有不同的名称)时,一切正常,但是当我们取消DEV服务时,服务不会从服务列表中删除,也不会从注册表项中删除.
知道在同一台机器上可能导致相同配置的不同行为吗?
我有一个引用System.Data.SQLite(来自nuget)的C#类库.这是构建后我的bin文件夹的结构:
- MyProject.dll
- System.Data.SQLite.dll
- 86/SQLite.Interop.dll
- X64/SQLite.Interop.dll
System.Data.SQLite需要SQLite.Interop运行并在运行时找到正确的dll.但是,当我使用包含项目主输出的InstallShield生成安装程序时,不会复制x86和x64文件夹,并且我的应用程序无法运行.
有什么方法可以强制Visual Studio在主输出中包含x86和x64文件夹?
有没有办法在InstallShield中手动包含文件夹和相对路径?
我的环境:
- Visual Studio 2012专业版
- 安装Shield 2013限量版(免费)
- System.Data.SQLite 1.0.96
dll installshield system.data.sqlite visual-studio-2012 installshield-le
installshield ×10
acl ×1
asp.net ×1
com ×1
dll ×1
installation ×1
permissions ×1
runtime ×1
svn ×1
visual-c++ ×1
windows ×1
wix ×1