visual-studio-2010 – 创建自定义操作以启动应用程序和退出安装程序

感谢StackOverflow,我昨天发现如何在Visual Studio安装程序中添加自定义操作以在更新后启动我的程序.我现在面临的问题是,在安装程序结束时程序打开但安装程序永远不会完成,直到我退出我的应用程序.

有没有办法确保应用程序仅在用户单击MSI包上的完成后启动?
或者程序在安装程序完成时启动但安装程序完成并退出?

我正在运行Visual Studio 2010以防万一.

最佳答案
经过一些谷歌搜索,我发现Visual Studio安装程序的自定义操作可能需要指向安装程序类.所以我在我的解决方案中创建了一个类型类的新项目.我删除了class1.cs文件并使用以下代码向新项目添加了一个安装程序类(注意:在某些时候需要使用security.permissions):

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.Linq;
using System.Diagnostics;
using System.Security.Permissions;


namespace AppName
{
    [RunInstaller(true)]
    public partial class InstallerClass : System.Configuration.Install.Installer
    {
        public InstallerClass()
        {
            InitializeComponent();
        }

        public override void Commit(System.Collections.IDictionary savedState)
        {
            base.Commit(savedState);
            System.Diagnostics.Process.Start(Context.Parameters["TARGETDIR"].ToString() + "application.exe");
            // Very important! Removes all those nasty temp files.
            base.Dispose();
        }
    }
}

添加InstallerClass后,我右键单击安装程序项目并选择Add>项目输出并添加了安装程序类.然后我右键单击已安装的项目并执行View>自定义操作.我将安装程序类添加到Install和Commit文件夹中(如果你只将它添加到Commit,你将得到一个错误1001:找不到文件InstallState.因为覆盖提交,它只会在提交时运行.显然InstallState是在第2阶段创建,所以如果它不在两者中,它将会悲惨地失败).

您必须添加CustomActionData条目.为此,请选择“InstallerClass的主要输出”并转到“适当”选项卡.将以下内容粘贴到CustomActionData中:

/TARGETDIR="[TARGETDIR]\"

在添加之后,应用程序在安装完成后正常运行,您可以关闭安装程序而不是等待应用程序退出!

正是我需要的.感谢Google保存我的培根.

我注意到的一个问题是安装程序现在在我的ApplicationFolder中创建了多个.tmp文件和一个.InstallState文件.我想知道是否还有一些东西需要添加到安装程序类来摆脱这些无用的文件?

弄清楚如何摆脱临时文件.使用Dispose()更新了代码.

转载注明原文:visual-studio-2010 – 创建自定义操作以启动应用程序和退出安装程序 - 代码日志