我创建了一个 Visual Studio 安装项目,并将两个控制台应用程序作为项目输出添加到安装项目中。每个控制台应用程序都有其安装程序类。在安装项目的自定义操作中,我添加了上面两个应用程序。
在consoleApp2的InstallerClass中我有一些验证,如果验证成功那么它将验证ConsoleApp1的InstallerClass,否则安装安装应该回滚。
在回滚操作期间,我收到“错误 1001。无法找到文件应用程序路径 \Consoleapp1.InstallState”,如下所示,因为它的 installstate 尚未启动。
有什么办法可以解决这个问题吗?我的主要座右铭是如果安装程序类中的验证失败,则回滚安装而不向用户显示错误。下面是我正在使用的代码。
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
MessageBox.Show("Install");
try
{
const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";
using (RegistryKey ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
{
if (ndpKey != null && ndpKey.GetValue("Release") != null && Convert.ToInt32(ndpKey.GetValue("Release")) > 461310)
{
MessageBox.Show("Framework version is " + ndpKey.GetValue("Release").ToString());
string message = "This setup requires .Net framework Version 4.7.1. Please install the .Net Framework and run setup again. The .Net framework can be obtained from the web. Would you like to do this now ?";
MessageBoxButtons buttons = MessageBoxButtons.YesNo;
DialogResult result = MessageBox.Show(message, "", buttons);
if (result == DialogResult.Yes)
{
Process.Start("http://go.microsoft.com");
throw new InstallException(String.Format("Installation rollbacked."));
}
else
{
throw new InstallException(String.Format("Cancelling Installation"));
}
}
else
{
}
}
}
catch (Exception ex)
{
throw new Exception(String.Format("Cancelling Installation 123"));
}
}
public override void Rollback(IDictionary savedState)
{
base.Rollback(savedState);
MessageBox.Show("rollback c2 " + savedState.Values);
}
public override void Uninstall(IDictionary savedState)
{
base.Uninstall(savedState);
}
public override void Commit(IDictionary savedState)
{
base.Commit(savedState);
}
我也遇到类似的错误。有没有人能回答以上问题?