Проблема с ярлыком в проекте установки C # - PullRequest
0 голосов
/ 26 октября 2009

У меня есть проект установки с пользовательским классом установщика, который запускает приложение в конце установки. В настройке я создаю ярлык для вывода приложения. Установка идет нормально. Но когда я нажимаю на ярлык, установщик перезагружается и приложение запускается одновременно? Почему?

Нет, код моего пользовательского класса:

/// <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 ]

1 голос
/ 08 декабря 2009

хорошо, я нашел проблему. Ошибка в коде пользовательского класса установщика:

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

Это запускает процесс, не асинхронный, и установка никогда не заканчивается. Вот почему он всегда перезапускает установку.

Я изменяю свой код и запускаю процесс в отдельном потоке, поэтому настройка завершена.

1 голос
/ 26 октября 2009

В установочном проекте размещены ярлыки специального типа. Он не просто запускает вашу программу. Сначала он проверяет наличие всех файлов, установленных с программой. Если они это сделают, он запустит программу, если они не установят, снова запустится установщик из кэша MSI, чтобы переустановить отсутствующие файлы.

Есть ли у вас действия после установки, которые удаляют некоторые из установленных файлов?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...