我想在安装项目中包含一个文件夹,以便在部署该安装程序时,整个文件夹也会部署到安装位置.
c# installation setup-project visual-studio-2008 visual-studio
我正在尝试使用WIX创建一个安装项目,这将允许我安装单个产品的多个功能.如何更新其中一个已安装的功能(独立于其他已安装的功能),而无需重新安装功能树中的其他功能?
例如,我希望能够拥有一个名为HelloWolrd的项目(返回HelloWolrd),其中(惊喜)打印出"Hello world!" 屏幕上.假设我有三个这样的hello world应用程序,Hello World 1,Hello World 2和Hello World 3.每个应用程序都会在屏幕上显示Hello World 1,2或3.我想要的是创建一个MSI,它默认安装所有这三个"功能",但也允许稍后单独升级每个功能.
这是我的解决方案布局:
Solution Explorer http://img12.imageshack.us/img12/5671/solutionexplorerm.jpg
我的WIX Product.wxs文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Product Id="ca484210-c719-4b2e-b960-45212d407c11" Name="HelloWorldInstaller" Language="1033" Version="1.0.0.0" Manufacturer="HelloWorldInstaller" UpgradeCode="68eeb8cb-9ef3-443c-870c-9b406129f7ff">
<Package InstallerVersion="200" Compressed="yes" />
<Media Id="1" Cabinet="media1.cab" EmbedCab="yes" />
<!-- Create Directory Structure -->
<Directory Id="TARGETDIR" Name="SourceDir">
<Directory Id="ProgramFilesFolder">
<Directory Id="INSTALLLOCATION" Name="Hello World" />
</Directory>
<Directory Id="DesktopFolder" Name="Desktop"/>
</Directory>
<DirectoryRef Id="INSTALLLOCATION">
<Component Id="HelloWorld1" Guid="6D1D9D33-DA17-4db3-8132-C39F32200C3A">
<RegistryKey Root="HKCU" Key="Software\HelloWorldInstaller\HelloWorld1\Install" Action="createAndRemoveOnUninstall">
<RegistryValue Name="DTSC" Value="1" Type="integer" KeyPath="yes" />
</RegistryKey>
<File Id="HelloWorld1.exe" …Run Code Online (Sandbox Code Playgroud) 我使用Visual Studio 2010创建了我的第一个安装项目.我注意到,当我构建安装项目时,它会生成一个MSI安装程序文件和一个setup.exe可执行文件.但是,我似乎能够右键单击MSI文件并选择安装来安装我的应用程序而不是运行setup.exe.
生成的setup.exe文件是否除了启动MSI文件之外还执行其他操作?分发我的应用程序时,我可以只提供MSI文件而不是MSI文件和setup.exe文件吗?
在我的VS安装和部署项目中,我想创建一个桌面快捷方式,其名称设置为[ProductName]属性.安装程序只是将[ProductName]视为字符串文字,而不是使用该属性.我怎样才能让它按照我想要的方式行事?
我目前正在开发Visual Studio 2010安装项目,并想知道以下是否可行:
1)以默认表单不显示的方式运行安装项目,而是显示我自己的自定义表单,订阅设置项目事件.这样我就会显示安装消息并增加我自己的进度条.
2)如果可能1,我需要一种方法来指定默认位置.
3)我有一个单独的库项目,我在安装处理程序中有一个自定义安装类(继承自"System.Configuration.Install.Installer")我希望能够显示自定义窗体,并控制选择由用户制作.我想通过添加对system.windows.forms的引用是可能的,但这是正确的方法吗?如果我无法隐藏默认安装表单,这些自定义表单将显示在默认安装表单上,我认为它看起来太棒了.
建议,链接等赞赏谢谢!
*更新1*
我可以从c#代码中启动.msi,还可以传入一个值.?
这个人在这里做什么: 链接
但是传入一个值...然后从我的自定义安装类中,我会根据此值采取操作.
更新2
好像我可以: 链接代码项目
更新3
我正在考虑做以下事情,我将开始使用winforms应用程序进行测试.
1)启动winforms应用程序.
2)进行一些webService调用,显示数据,用户进行选择.
3)根据更新1中的链接,启动过程(静默模式)和每个更新2,传入选定的值.
4)使用一些跨进程事件机制(WCF),以便我的自定义安装类可以通知我的表单,其运行的不同步骤和更新进度条和消息.
好的,这是我采取的步骤......
创建和自定义安装项目
设置安装项目版本= 1.0.0
构建安装项目
安装版本1.0.0
运行程序,在窗口的标题栏中 显示"v1.0.0"
更改程序中的代码以在窗口的标题栏中显示"v1.0.1"
设置安装项目RemovePreviousVersions = True
设置项目版本= 1.0.1
更改ProductCode(根据提示)
构建安装项目
安装版本1.0.1
运行程序,显示" v1.0.0"在窗口的标题栏中
新安装程序安装了旧版本的软件.在控制面板的"程序和功能"(以前称为"添加/删除程序")中,它显示已安装1.0.1版.我经历过多个教程,如http://www.simple-talk.com/dotnet/visual-studio/updates-to-setup-projects/
当您准备构建新版本的产品以替换旧版本时,请按照下列步骤操作:
- 增加version属性(参见图1).Visual Studio将显示一个消息框,提示您更改ProductCode和PackageCode.选择是.
- 将RemovePreviousVersions属性设置为true.
将RemovePreviousVersions属性设置为true会在安装新版本时从系统中删除以前版本的产品.由于产品由ProductCode Guid识别,因此更改ProductCode会创建新产品.也就是说,在安装新产品时会卸载旧产品.
如果我从控制面板手动删除1.0.0,然后安装1.0.1,程序运行正常显示"v1.0.1".
我在这里错过了什么?
VS中有"安装项目".安装过程中,我启动另一个过程
System.Diagnostics.Process process = new System.Diagnostics.Process();
//fill StartInfo and run call Start()
process.Start();
Run Code Online (Sandbox Code Playgroud)
如果我在Windows 7下运行安装程序并安装"Everyone",则在SYSTEM下启动进程.如果我安装"Just for me",请在当前用户下启动流程.如何始终在当前用户下启动流程?
我在GAC中注册了一个DLL,其中有一个错误(v4.2.0).
因此,我修复了该错误,仅更新了文件版本(v4.2.1)(保留了程序集版本,v4.2.0)并构建了一个新的MSI包.
问题是DLL没有安装在GAC中.我通过右键单击DLL验证了这一点C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MyDLL\v4.0_4.2.0.0__2269313d92725976并检查了文件版本,这仍然v4.2.0是没有在其下创建的其他文件夹C:\Windows\Microsoft.NET\assembly\GAC_MSIL\MyDLL.
但!如果我卸载第一个版本,然后安装新的DLL,它就会在GAC中安装好.
我是以错误的方式接近这个吗?我们的应用程序设置为使用特定版本,因此只需创建程序集版本v4.3.0并将其安装在GAC中就行不通.
更新
我找到了有关发布商政策的文章(http://support.microsoft.com/kb/891030)并正在尝试这样做.我已经生成了策略程序集.但是当我尝试将它添加到安装项目时,Visual Studio崩溃=(
我还尝试将其作为内容文件添加到主项目中(然后将内容文件添加到GAC).但后来它抱怨集会没有签署.
所以我仍然被困住了.
在过去的几天里,我一直在努力弄清楚如何设置 CI/CD 过程只是为了构建一个简单的 WPF 解决方案并使用 Azure DevOps Pipelines 创建 MSI 安装文件(“工件”)。我曾尝试使用Build VS Installer来完成此操作。我的主要问题是我不知道我到底做错了什么或我遗漏了哪些步骤,而且我在任何地方都找不到明确的说明。
这是我尝试过的:
使用 Hosted 2017 代理池和基本的 .NET 桌面模板。问题:
2018-11-28T22:57:56.3186071Z DEBUG: Aggregated: C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.com
2018-11-28T22:57:56.3211382Z Now running (C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.com) with Arguments ("D:\a\1\s" /Build "release|any cpu" /Out "D:\a\1\b\BuildInstaller_Log_20181128225756.txt")
2018-11-28T22:58:54.0015320Z Done running DevEnv process. Success = True.
2018-11-28T22:58:54.1169279Z ##[warning]No .MSI files were found, please check your build-configuration. If this is expected, you might consider to use the default …
当我在 Visual studio 中创建 blazor 应用程序后。当我尝试运行或构建应用程序时收到此错误。
我用过dotnet restore和dotnet build。
compiler-errors build setup-project blazor blazor-client-side
setup-project ×10
c# ×6
deployment ×2
installation ×2
.net ×1
azure-devops ×1
blazor ×1
build ×1
gac ×1
shortcut ×1
wix ×1
wix3 ×1