Привіт, боги,
Останнім часом я використовую Setup Project для пакування програми, і вона називається A. Через вимоги проєкту мені довелося встановити інсталяційний пакет B, упакований InstallShield, під час встановлення A. У цьому. AfterInstall та це.BeforeRemove частини додають код «Install» та «Reverse Install» B відповідно. Однак його не вдалося виконати плавно, і setup.log, згенерований B, отримав ResultCode=-3, але причина цього невідома...
Я благаю бога ради допомогти, ця проблема давно турбує мого молодшого брата, і я не зміг її вирішити... Дякую!!
У наступному коді код у InstallerHelper_AfterInstall та InstallerHelper_BeforeUninstall розміщується у новоствореній консолі C#, але вона може працювати нормально. І WaitforExit() також може застрягти плавно, а пакет встановлення B також може запускатися плавно, ResultCode=0.
Код виглядає так: -- використовуючи System; використовуючи System.Collections; з використанням System.Collections.Generic; використовуючи System.ComponentModel; використовуючи System.Configuration.Install; використовуючи System.Linq; використовуючи System.Threading.Tasks; використовуючи System.Configuration; використання System.Windows; використовуючи System.IO; використання System.Diagnostics; використовуючи System.Threading;
простор назв FRWebService
{ [RunInstaller(true)] public partial class InstallerHelper : Installer { public InstallerHelper() {
InitializeComponent();
саме так. BeforeInstall += новий InstallEventHandler(InstallerHelper_BeforeInstall); саме так. AfterInstall += новий InstallEventHandler(InstallerHelper_AfterInstall);
саме так. BeforeUninstall += новий InstallEventHandler(InstallerHelper_BeforeUninstall); саме так. AfterUninstall += новий InstallEventHandler(InstallerHelper_AfterUninstall); }
private void InstallerHelper_BeforeUninstall(object sender, InstallEventArgs e) { спробуйте { String arg = "/s /uninst"; Процес p = Process.Start("C:\\Program Files\\Test\\setup_io.exe", arg); p.WaitForInputIdle(); p.WaitForExit();
} catch (виняток, наприклад) {
} }
private void InstallerHelper_BeforeInstall(object sender, InstallEventArgs e) {
}
private void InstallerHelper_Committing(object sender, InstallEventArgs e) {
}
private void InstallerHelper_Committed(object sender, InstallEventArgs e) {
}
private void InstallerHelper_AfterInstall(object sender, InstallEventArgs e) { спробуйте { String arg = "/s"; Процес p = Process.Start("C:\\Program Files\\Test\\setup_io.exe", arg); p.WaitForInputIdle(); p.WaitForExit(); } catch (виняток, наприклад) {
} }
private void InstallerHelper_AfterUninstall(object sender, InstallEventArgs e) {
}
Код для виконання під час встановлення додатка public override void Install(System.Collections.IDictionary stateSaver) { System.Diagnostics.Debugger.Launch(); базово. Встановити (stateSaver); System.Windows.Forms.MessageBox.Show ("Встановлення додатку..."); }
public override void Uninstall(System.Collections.IDictionary stateSaver) { System.Diagnostics.Debugger.Launch(); базово. Uninstall(stateSaver); System.Windows.Forms.MessageBox.Show ("Видалення додатку..."); }
}
} --
|