这种行为是如何设置的?我找不到如何禁用引导程序在重新启动时启动。我将安装程序,关闭计算机,第二天,当我启动计算机时,会出现引导程序窗口。即使它会卸载引导程序。当我在测试中多次安装它时,后来我有几个窗口。但是这个弹窗并不总是发生,我不知道它取决于什么。
编辑
在 RegisterBegin 之后查看日志:
<块引用>会话开始,注册码: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{bf97c7e8-2ef4-4439-9504-96a7736c10f4}, 选项:0x4,禁用恢复:无注册捆绑依赖项 提供者:{bf97c7e8-2ef4-4439-9504-96a7736c10f4},版本:1.0.120.0 更新会话,注册密钥: SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall{bf97c7e8-2ef4-4439-9504-96a7736c10f4}, 恢复:活动,重启启动:否,禁用恢复:否
你看到 disable resume: No
,我找不到任何关于它的信息,但也许它会导致应用程序在重启后运行。
Edit2
这是因为引导程序添加了寄存器 HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnce。
但找不到如何关闭它。
答案 0 :(得分:0)
最终,这样做的原因是为引导程序添加了 RunOnce 注册表。网上写到,据开发者称,这是对安装成功的确认。但就我而言,这对我来说是不必要的,因为我自己进行了配置后测试。为了防止这种情况发生,我连接到 OnRegisterComplete 事件并删除了所有包含我的安装程序名称的寄存器。
但是,这需要以管理权限运行引导程序。
private void OnRegisterComplete(object sender, RegisterCompleteEventArgs e)
{
try
{
string registryKey = @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\RunOnce";
RegistryKey key32 = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32);
RegistryKey key = key32.OpenSubKey(registryKey, true);
if (key != null)
{
var names = key.GetValueNames();
for (int i = 0; i < names.Length; i++)
{
var value = key.GetValue(names[i]);
if (value.ToString().Contains("NameInstaller.exe"))
key.DeleteValue(names[i]);
}
key.Close();
}
}
catch (Exception ex)
{
}
}