C#安装项目中的快捷方式问题

时间:2009-10-26 11:52:26

标签: c# installation

我有一个安装项目,其中包含一个自定义安装程序类,可在安装结束时启动应用程序。在设置中,我创建了应用程序输出的快捷方式。安装顺利。但是,当我单击快捷方式时,安装程​​序会重新启动并同时启动应用程序?为什么呢?

不,我的自定义类的代码是:

/// <summary>
/// Installer class to automatically launch the application at  the end of the installation/
/// </summary>
[RunInstaller(true)]
public partial class InstallerStartApplication : Installer
{
    /// <summary>
    /// Initializes a new instance of the <see cref="InstallerStartApplication"/> class.
    /// </summary>
    public InstallerStartApplication()
    {            
        InitializeComponent();            
    }

    /// <summary>
    /// Raises the <see cref="E:System.Configuration.Install.Installer.AfterInstall"/> event.
    /// </summary>
    /// <param name="savedState">An <see cref="T:System.Collections.IDictionary"/> that contains the state of the computer after all the installers contained in the <see cref="P:System.Configuration.Install.Installer.Installers"/> property have completed their installations.</param>
    protected override void OnAfterInstall(IDictionary savedState)
    {
        base.OnAfterInstall(savedState);


    }

    // Override the 'Install' method.
    public override void Install(IDictionary savedState)
    {
        base.Install(savedState);
    }

    // Override the 'Commit' method.
    public override void Commit(IDictionary savedState)
    {           
        base.Commit(savedState);

        try
        {
            Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
            Process.Start(Path.Combine(Directory.GetCurrentDirectory(), "IERssNotificator.exe"), "-c");
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex);
        }  
    }

    // Override the 'Rollback' method.
    public override void Rollback(IDictionary savedState)
    {
        base.Rollback(savedState);
    }


}

我在安装时启动它并提交自定义操作。

2 个答案:

答案 0 :(得分:1)

安装项目会放置特殊类型的快捷方式。它不只是启动你的程序。它首先检查随程序安装的所有文件是否存在。如果他们这样做,它会启动程序,如果他们不从msi缓存再次运行安装程序以重新安装丢失的文件。

您是否有删除某些已安装文件的安装后操作?

答案 1 :(得分:1)

好吧,我发现了问题。错误发生在自定义安装程序类的代码中:

Process.Start(Path.Combine(Directory.GetCurrentDirectory(), "IERssNotificator.exe"), "-c");

这个启动过程,不是异步的,设置永远不会结束。这就是为什么它总是重新启动设置。

我更改了我的代码并将该过程变为一个单独的线程,因此设置完成。