我创建了一个在安装开始时执行的函数,用于在SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Run路径中创建注册表项,因此应用程序可以在计算机启动时启动。
此功能适用于XP / 2003计算机,但不适用于Windows 7.安装应用程序在安装过程中会自动提升权限,因为它正在安装Windows服务程序。所以我想知道我又做错了什么?
这是功能:
private void RegisterInStartup(bool isChecked)
{
try
{
string t_registeryPath = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
RegistryKey registryKey =
Registry.LocalMachine.OpenSubKey(t_registeryPath, true);
if (registryKey == null)
registryKey = Registry.LocalMachine.CreateSubKey(t_registeryPath);
if (isChecked)
{
string tgt_dir = Context.Parameters["targetPath"];
if (!Directory.Exists(tgt_dir))
return;
string t_exeName = Path.Combine(tgt_dir, "AppTaskbarNotificator.exe");
if (!File.Exists(t_exeName))
return;
registryKey.SetValue("AppTaskbar", t_exeName);
}
else
{
registryKey.DeleteValue("AppTaskbar");
}
}
catch (Exception)
{
return;
}
}
并将其置于Install函数中,该函数在App的Installer类中被重写。
public override void Install(IDictionary stateSaver)
{
base.Install(stateSaver);
System.Diagnostics.Debugger.Break();
RegisterInStartup(true);
StartApp();
}
提前致谢。
答案 0 :(得分:2)
HKEY_LOCAL_MACHINE是每台计算机的位置,因此您的自定义操作需要管理员权限才能在其中写入。您可以通过将其设为deferred with no impersonation来为其提供这些权限。
默认情况下,Visual Studio 2010会使自定义操作延迟而不进行模拟,但旧版本则不会。因此,您可能需要使用Orca编辑MSI以设置适当的标记。
另一种解决方案是在HKEY_CURRENT_USER中编写注册表项。