我们正在开发Visual Studio 2005中的winforms应用程序,我们创建的安装项目同时输出MSI和EXE.我们不确定EXE文件的用途是什么,因为我们可以在没有EXE的情况下安装.
我需要显示一个WiX 3脚本才能显示2个对话框:欢迎和完成.这是不需要EULA,文件夹选择等所有帮助赞赏.
我想在wix项目生成的msi文件的文件名中包含一些动态部分.这个动态部分应该由变量控制,这些变量是我的wix项目的一部分,并且声明如下:
<?define ProductVersion="7.1.0.1" ?>
Run Code Online (Sandbox Code Playgroud)
有没有人知道将wix变量的值发送给链接器以将其用作输出文件名的一部分的方法?
顺便说一下:我正在使用Wix3
我在这件事上看到了别人的问题,但我无法让它对我有用.我正在努力习惯Wix,所以我们可以迁移我们的vdproj(我觉得我们已经向前迈出了一步,又向后退了4步......最基本的东西已经变成了Wix完全不平凡......但我确实看到了为构建安装程序提供完全成熟的声明性标记的价值.
我在SharpDevelop的wixproj中有以下wxs.
安装工程.卸载不执行任何操作,并将安装文件夹和dll保留在原位.有什么问题?
Files.wxs:
<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<DirectoryRef Id="TARGETDIR">
<Directory Id="ProgramFilesFolder" Name="PFiles">
<Directory Id="INSTALLDIR" Name="Client">
<Component Id="InteropDll" Guid="AD09F8B9-80A0-46E6-9E36-9618E2023D66" DiskId="1">
<File Id="Interop.dll" Name="Interop.dll" Source="..\Interop\bin\$(var.Configuration)\Interop.dll" KeyPath="yes" />
<RemoveFile Id="RemoveInterop.dll" Name="Interop.dll" On="uninstall" />
</Component>
</Directory>
</Directory>
</DirectoryRef>
</Fragment>
</Wix>
Run Code Online (Sandbox Code Playgroud)
Setup.wxs:
<?xml version="1.0"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="*"
Name="Client Setup"
Language="1033"
Version="1.0.0.0"
UpgradeCode="4A88A3AD-7CB6-46FB-B2FD-F4EADE0218F8"
Manufacturer="Client Setup">
<Package Description="#Description"
Comments="Comments"
InstallerVersion="200"
Compressed="yes"/>
<!--
Source media for the installation.
Specifies a single cab file to be embedded in the installer's .msi.
-->
<Media Id="1" Cabinet="contents.cab" EmbedCab="yes" …Run Code Online (Sandbox Code Playgroud) 使用Windows安装程序部署程序时,如何设置默认安装路径.
我正在尝试自动卸载使用WiX创建的软件包,以便更改已安装的软件堆栈和配置,而无需重新配置整个操作系统.最终我将使用powershell脚本来执行此操作,但目前我似乎无法使用cmd以交互方式卸载我的测试包.
如果我跑:
msiexec /x '{A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8}'
msiexec /x A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8
我明白了:
"无法打开安装包.验证包是否存在以及您是否可以访问它,或联系应用程序供应商以验证这是否是有效的Windows Installer程序包."
如果我跑:
msiexec /x {A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8}
我明白了:
"此操作仅对当前安装的产品有效"
我查看了Windows安装程序指南,WiX文档,msiexec文档,并使用orca自己查看.msi,但我还没有找到任何可以清楚地了解卸载处理方式的内容.是否需要.msi文件,如果没有,那么为什么Windows安装程序在给出GUID时似乎认为它是?
.msi安装程序的WiX代码是:
<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='htp://schemas.microsoft.com/wix/2006/wi' >
<!--DO NOT COPY / PASTE THE PRODUCT ID GUID BELOW TO YOUR OWN WIX SOURCE -->
<Product Id='A4BFF20C-A21E-4720-88E5-79D5A5AEB2E8' Language='2057'
Manufacturer='COMPANYNAME IT-Operations'
Name='COMPANYNAMEServerListener' Version='1.0.0'
UpgradeCode='PUT-GUID-HERE'>
<Package Id='*' Manufacturer='COMPANYNAME IT-Operations' Compressed='yes' />
<Media Id='1' Cabinet='COMPANYNAMEServerListener.cab' EmbedCab='yes' />
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='ProgramFilesFolder' Name='PFiles'>
<Directory Id='COMPANYNAME' Name='COMPANYNAME'>
<Directory Id='INSTALLDIR' Name='COMPANYNAMEServerListener'>
<Component Id='MainExecutable' Guid='*' > …Run Code Online (Sandbox Code Playgroud) 我们的安装程序是用Inno Setup编写的,我们对它非常满意.然而,一些客户不断要求MSI安装程序,他们可以通过Active Directory更轻松地分发.我们已经花了一些时间,通过/LOADINF使用我们自己的选项扩展Inno Setup的机制,使安装程序与自动化和无人值守安装相得益彰.
为了满足客户要求MSI,我一直在考虑简单地将我们的常规安装程序包装在MSI中,可能是使用WIX创建的.问题是:我可以保持当前安装程序提供的高可配置性吗?在无人值守/大规模安装方案中,如何通过外部MSI公开Inno Setup安装程序的选项?
请注意,我还没有真正深入到实际挖掘MSI创建和WIX的程度.现在我只关心那些知道他们在说什么的人认为这是一种可行/合理的方法来投入我们的能量......
[编辑:]最初我认为我可以使用临时提取和执行方法,即MSI只是用作将Inno安装程序交付到目标PC并在其中以/VERYSILENT-mode 执行的容器.但我想要求MSI的客户也希望能够从中央位置卸载甚至修改安装,我想在那种情况下这是不可能的,不是吗?
PS:我们在这里也有一份WISE for MSI的旧版本,但这种体验实际上就是为什么我们开始使用Inno来开始...
我目前正在开发.NET 4.0,Visual Studio 2010,Windows 7-32bit的Windows服务.我有一个安装程序项目,为我安装.当我安装该服务,卸载它,并尝试再次安装时,我收到以下错误:
错误1001.指定的服务已标记为删除
在Windows XP中,问题是Services.msc已打开.关闭此窗口可以解决此问题.
但是,使用Windows 7,我可以解决此问题的唯一方法是重新启动.我尝试关闭所有程序,但问题仍然存在.
有没有人知道如何解决这个问题而不重新启动?
编辑
我没有看到这个问题,因为我停止使用MSI安装程序,而是使用sc.exe来手动安装服务.我认为这个问题可能与Visual Studio 2010和MSI安装程序项目的组合有关.但是,我仍然不知道这个问题的罪魁祸首是什么. 事实证明,Process Explorer是罪魁祸首.
这可能吗?
我所能看到的只是我需要使用第三方工具(例如Orca)从我现有的MSI获取GUID并使用这些来配置InstallShield以卸载现有版本.我已经尝试过这些指令中的一两个,但到目前为止还没有任何工作.可能是因为我做错了什么,但似乎我正在经历许多箍,做一些我认为应该相对直截了当的事情.这个问题以前没有解决过吗?
谷歌的最高结果指向了这个答案:
这是否意味着每次我想部署新版本时,我必须用Orca打开我的'旧MSI并获得它的UpgradeCode'?
这听起来有点hackish,当然我每次部署新版本时都不想做.有没有办法实现自动化?这个功能是否在更高版本的InstallShield中可用(请记住我在LE上 - 如果需要我会升级)
我在同一个解决方案中有一个控制台应用程序项目和相关的安装项目.当我运行生成的.msi时,安装向导会显示以下默认安装位置:
C:\Program Files (x86)\Default Company Name\myApp\
Run Code Online (Sandbox Code Playgroud)
我怎样才能把自己的公司名称?