我不是一名全职程序员,但必须做一些工具来支持我的工作。我已经完成了我现在需要部署的应用程序的编写。
我不想使用“ClickOnce”,因为我需要在配置时更改“本地”文件夹中的文件。我的理解是,如果我使用Build菜单下的Publish选项,那么我正在使用“ClickOnce”。
我的研究让我相信“你通过在解决方案中添加一个或多个部署项目来实现这一点”。 MSDN然后声明,要实现这一点,我需要选择“添加项目”和“在生成的”添加新项目“对话框中,选择”安装和部署项目“文件夹。”
问题是,我没有这样的选择?!
有人可以解释为什么会出现这种情况,以及我如何解决这个问题。我花了半天的谷歌搜索,无法想出一条前进的道路?
项目和系统的详情如下:
环境:适用于Windows桌面的Visual Studio 2012 Express 当前项目:Windows表单应用程序 Op Sys:Windows 7专业版。
答案 0 :(得分:1)
尽管它的建议可能是正确的,但这是你正在阅读的旧教程。它可能指的是Visual Studio 2010。
That option has been removed in VS 2012。您将需要使用替代工具来构建安装程序。例如:
答案 1 :(得分:0)
我强烈建议看看Wix#。见http://www.codeproject.com/Articles/31407/Wix-WixSharp-managed-interface-for-WiX。如果您正在使用C#进行编码,那么Wix#可能是最简单,最舒适的技能组合,它是免费的,可以直接集成到您正在使用的Visual Studio环境中。
Wix#的CodePlex主页上的更多信息:http://wixsharp.codeplex.com/
对于需要创建Windows Installer MSI来部署其应用程序的C#开发人员,Wix#可能是Microsoft从VS2012开始从Visual2012中删除的“打包和部署”项目类型的最佳替代品。 Wix是WiX(Windows Installer Xml)工具集的C#前端。使用Wix#允许使用C#语言构建完整的Windows Installer MSI。
Wix#对于广泛的安装/部署方案非常有用,并且非常适合持续集成方案。有Wix#示例用于部署Windows桌面应用程序,用于安装Windows服务,安装ASP.NET网站以及更多类型的安装。
该问题提到需要在Windows 7上安装应用程序.Wix#支持此环境,并处理典型的安装程序要求,而简单项目的Wix#安装程序代码确实很简单。对于更复杂且需要高级功能的应用程序安装,Wix#可在需要时利用完整WiX工具集的强大功能。例如,在安装.NET应用程序时,典型的要求是安装应用程序exe和dll文件,并在目标系统上定制一些.NET配置文件和/或注册表项。
下面是一个简单的Wix#安装程序的C#代码示例,该安装程序在目标系统上安装应用程序,并修改某些配置文件。此示例假定您已编写名为“TailorMyConfig.exe”的实用程序,例如,使用ConfigurationManager.AppSettings例程的简单C#程序,并且您正在将此exe与您的应用程序一起部署。
using System;
using System.Windows.Forms;
using System.Diagnostics;
using Microsoft.Deployment.WindowsInstaller;
using WixSharp;
class Script
{
static public void Main(string[] args)
{
var project = new Project("MyProduct",
new Dir(@"%ProgramFiles%\My Company\My Product",
new File(@"Files\Bin\MyApp.exe"),
new File(@"Files\Bin\TailorMyConfig.exe")),
new ManagedAction("UpdateConfigFile"));
project.Id = new Guid("6f330b47-2577-43ad-9095-1861ba25889b");
Compiler.BuildMsi(project);
}
}
public class MyCustomAction
{
[CustomAction]
public static ActionResult UpdateConfigFile(Session session)
{
if (DialogResult.Yes == MessageBox.Show("Config file update ready to run.\n Update config file(s) now?",
"Config Tailoring Utility",
MessageBoxButtons.YesNo))
{
Process.Start("TailorMyConfig.exe", "Run utility to tailor config file to current system");
}
return ActionResult.Success;
}
}
请注意,使用WiX XML功能修改配置文件有“更好”的方法。为简单起见,上面的示例假定了一个用于修改配置文件的自定义编写的C#exe实用程序。我建议使用WiX XML功能来代替这一点。您可以使用“XML注入”的Wix#技术将几乎任何WiX XML功能直接合并到您的Wix#设置中。
请记住,Wix#只是一个发布WiX XML语法的C#前端。在Wix#发出WiX XML(wxs文件)之后,可以轻松地对该wxs文件进行后处理以插入其他WiX XML功能。然后,生成的wxs文件由WiX工具集编译为MSI。
有关使用XML Injection将WiX XML功能合并到Wix#(C#)安装的示例,请查看此处In Wix#, how to avoid creating a physical folder on the target system, when deploying only registry entries? 在那个问题中,请参阅我的答案,该答案使用将委托连接到“WixSourceGenerated”事件的技术。
然后,您可以使用此XML注入方法将一些WiX XML插入到您的安装程序中,以完成配置文件编辑。一些典型的WiX XML修改配置文件的示例如下: How to modify .NET config files during installation?
安装程序的另一个典型要求是在目标系统上添加或修改Windows注册表项。 Wix#使用“RegValue”类为其提供直接支持。使用Wix#时的优势是您还可以免费获得完整的“卸载”功能,包括卸载/恢复注册表项到安装前状态。这是Wix#基于WiX Toolset和Windows Installer技术构建的自然结果。仅限注册表的Wix#安装程序的示例如下:In Wix#, how to avoid creating a physical folder on the target system, when deploying only registry entries?
Wix#方法在我的环境中非常有用,它允许使用熟悉的C#技能组,而不必首先涉及到WiX XML安装程序技术的全部复杂性。