我在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).但后来它抱怨集会没有签署.
所以我仍然被困住了.
我正在使用Visual Studio中的安装项目,我希望用户能够使用复选框指定是否创建桌面快捷方式和/或程序的开始菜单快捷方式.
我可以让安装程序在适当的位置创建工作快捷方式,并添加了一个包含安装程序复选框的对话框; 但是,我无法将这些快捷方式的创建(或缺少)与这些复选框的状态相关联.
我假设我需要设置"条件"属性,但我不确定具体的语法.这是可能的,如果是这样,我将如何实现这一目标?
我的解决方案中有2个项目
Windows服务
它的安装项目
我需要我ProjectInstaller : System.Configuration.Install.Installer的方法调用OnAfterInstall来ProductName从安装项目中获取.我怎么做?
我有一个安装Windows服务的安装项目.
我们在自定义日志中注册了一个事件日志源,应该由winservice项目使用(如何以及为什么不重要).
我的问题是安装项目尝试默认创建事件日志源.通过这样做它得到一个错误消息("Error 1001" source XXX already exists on local computer)并回滚.
我到处寻找,我无法找到注册的位置或如何关闭它.
如何强制Windows服务或安装项目不创建事件日志源?
我已经为dev和prod创建了一个具有特定app.config的控制台应用程序(blah.exe).这些是命名dev_app.config和prod_app.config.我已经AfterBuild在我的csproj文件*中连接了一个目标,它将正确的配置文件复制到bin目录中blah.exe.config.
我还为这个控制台应用程序创建了一个安装项目,但我遇到了一个小问题.似乎安装项目使用app.config项目目录中的实际而不是最终blah.exe.config(位于bin目录中).
|--Bin
| |--Debug
| |--Blah.exe.config <--- I want the setup project to use this file
|--app.config <--- Setup project uses this file at the moment
|--dev_app.config
|--prod_app.config
Run Code Online (Sandbox Code Playgroud)
如何强制安装项目使用bin文件夹中生成的最终配置文件而不是实际app.config文件?
附加信息:
我当前的解决方案涉及添加另一个AfterBuild覆盖实际app.config文件的命令.我不喜欢接近,因为它迫使我有一个我不需要的额外文件.此外,由于我对app.config构建时被覆盖的文件进行了更改,因此拥有此文件已经让我感到悲痛.问题是如何让安装项目使用bin文件夹中的最终配置文件,而不是如何管理配置或创建配置文件的方法.
我使用Visual Studio安装项目为我的.Net应用程序创建MSI.如果我可以自动增加版本号,那就太好了.更好的方法是将安装程序版本设置为等于主输出exe的AssemblyVersion.
过去,我们使用Advanced Installer为特定项目构建我们的.msi安装程序.我们的高级安装程序的年度许可证已过期,因此为了避免续订成本,并且因为我认为可以使用Visual Studio完成相同的操作,所以我尝试使用Visual Studio 2010安装项目来构建我的.msi.
在大多数情况下,我使用Visual Studio构建的安装程序工作正常.但是,我们需要安装程序执行的一件事是运行几个.reg文件以向注册表添加大量设置(可能值得注意的是,这是旧软件,只有在更换后才会进行维护和更新完全在不久的将来.改变我们存储设置的方法是不切实际的).使用Advanced Installer,我们能够执行.cmd文件作为"安装"自定义操作,该操作将运行安装中也包含的这些.reg文件.VS安装项目具有自定义操作,但似乎在这里它们必须是.dll或.exe文件,因此我必须找到使用.bat或.cmd文件的替代方法.
首先,我尝试将一个命令行项目添加到我的解决方案中,该解决方案仅包含main()方法中的以下行:
using (Process registryInput = Process.Start("regedit.exe", "/s Settings1.reg"))
{
registryInput.WaitForExit();
}
using (Process registryInput= Process.Start("regedit.exe", "/s Settings2.reg"))
{
registryInput.WaitForExit();
}
Run Code Online (Sandbox Code Playgroud)
我将此项目的主要输出添加到"自定义操作"编辑器的"安装"文件夹中.试图运行安装程序,但命令行进程似乎从未运行过,也没有安装任何注册表设置.如果我从安装它的应用程序目录手动运行命令行可执行文件,它会按预期添加注册表项 - 所以问题不在于我用来调用.reg文件的代码.
我转向MSDN并更改了我的解决方案,以便在他们的自定义操作演练之后进行建模.我创建了一个类库项目(并删除了我的命令行项目)并添加了一个安装程序类.我们没有在其示例中所示的Commit()方法中使用Microsoft的网站URL启动浏览器,而是将上面的代码添加到Install()方法中.这是我最终得到的:
[RunInstaller(true)]
public partial class Installer1 : System.Configuration.Install.Installer
{
public Installer1()
{
InitializeComponent();
}
[System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand)]
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
using (Process registryInput = Process.Start("regedit.exe", "/s Settings1.reg")) …Run Code Online (Sandbox Code Playgroud) registry installer custom-action setup-project visual-studio-2010
我想创建一个Visual Studio 2010安装项目,将一些文件部署到我的应用程序可以使用它的文件夹中.我希望如此,所有用户都拥有相同的文件,并且他们也可以在没有管理员权限的情况下操纵它们.
因此,如本MSDN文章中所述的 "通用应用程序数据文件夹"*似乎很好.
但是,在我的Visual Studio 2010安装项目中,我没有在"添加特殊文件夹..."下拉菜单中找到"通用应用程序数据文件夹".
我有一个.NET 4.0 WinForms应用程序,并没有看到为什么这不显示. 该用户的通用应用程序数据文件夹是有的,但我的用途不匹配.
谢谢你的任何提示!
我几天来一直面临一个问题,经过多次研究后,我找不到任何适合我的情况的东西。
事情是这样的:我正在使用 Visual Studio 2010 开发一个包含多个项目和一个安装项目的解决方案。我希望安装项目创建一个 MSI 文件以将产品从版本 1.5 更新到版本 1.6。
我遵循了本教程http://www.simple-talk.com/dotnet/visual-studio/updates-to-setup-projects/并更新了解决方案每个项目的程序集版本和文件版本号。
我的安装项目的设置是:
DetectNewerInstalledVersion : True
InstallAllUsers : True
RemovePreviousVersions : True
Version : 1.6.3
ProductCode 与以前版本的 ProductCode 不同
,UpgradeCode 与以前版本的 UpgradeCode 相同。
我读到,通常 MSI 应该删除版本比现有文件新的文件并替换为新文件。当我运行以前的 MSI(将产品从 1.4 更新到 1.5 的 MSI)时,它工作得很好,正如所描述的那样。(我不确定它是用哪个版本的 Visual Studio 编译的,但我猜是用 VS2008 编译的)。
现在,当我运行 MSI 时,它似乎首先运行“安装序列”,用新的 .exe 替换旧的 .exe,然后运行“卸载序列”,擦除 .exe。当安装“完成”时,我的应用程序目录中不再有 .exe。(但是,在“添加/删除程序”面板中,该产品显示为安装在版本 1.6 中)。
(注意:我可以注意到 MSI 的“安装”部分或“卸载”部分何时运行,因为两者都有打开控制台应用程序的自定义操作,我可以在其中进行跟踪)。
经过更多研究,我将旧的 MSI 与我的 ORCA 进行了比较,我注意到 InstallExecuteSequence 表中的差异:
对于旧的 MSI,RemoveExistingProducts 的序列号是1525,介于 InstallInitialize (1500) 和 AllocateRegistrySpace (1550) 之间。 …
windows-installer setup-project visual-studio-2010 visual-studio-setup-proje
我需要通过脚本为我的WPF应用程序创建可安装的设置.我不知道从哪里开始,最好的方法是什么.请帮忙.