我有一个安装项目,其中包含一个自定义安装程序类,可在安装结束时启动应用程序。在设置中,我创建了应用程序输出的快捷方式。安装顺利。但是,当我单击快捷方式时,安装程序会重新启动并同时启动应用程序?为什么呢?
不,我的自定义类的代码是:
/// <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);
}
}
我在安装时启动它并提交自定义操作。
答案 0 :(得分:1)
安装项目会放置特殊类型的快捷方式。它不只是启动你的程序。它首先检查随程序安装的所有文件是否存在。如果他们这样做,它会启动程序,如果他们不从msi缓存再次运行安装程序以重新安装丢失的文件。
您是否有删除某些已安装文件的安装后操作?
答案 1 :(得分:1)
Process.Start(Path.Combine(Directory.GetCurrentDirectory(), "IERssNotificator.exe"), "-c");
这个启动过程,不是异步的,设置永远不会结束。这就是为什么它总是重新启动设置。
我更改了我的代码并将该过程变为一个单独的线程,因此设置完成。