我正在为我们的应用程序设计一个安装程序。安装程序会对 HKEY_CURRENT_USER\Software\Company\AppName 注册表键进行一些更改,然后应用程序会在首次运行时查找这些键,根据找到的键执行不同的操作。
这个方法很好用,但当你尝试使用非管理员帐户(即普通用户)在 Windows 7 上安装应用程序时,就会出现问题(可能在 Vista 上也存在,但我还没有测试过)。
当用户尝试安装应用程序时,Windows 会以管理员帐户凭据进行提升。这意味着对注册表中的 HKCU(当前用户)所做的任何更改都会被应用到管理员的注册表键上,而不是启动用户的注册表键上。因此,当应用程序在用户帐户下首次启动时,这些键是不可见的。
我们不可能是唯一需要与其安装的应用程序通信的人。难道没有可靠地使用注册表来实现这一目标的方法吗?
我们不能依赖用户在安装后立即启动应用程序,因此将信息作为命令行参数传递也不是可行的解决方案。我能想到的唯一方法是让安装程序以原始用户身份调用实用程序,该实用程序自己获取或设置注册表键;但是这看起来有点儿麻烦。
注意:应用程序需要在使用完这些键后将其删除,因此我不能将它们放在 HKEY_LOCAL_MACHINE 中。
这个方法很好用,但当你尝试使用非管理员帐户(即普通用户)在 Windows 7 上安装应用程序时,就会出现问题(可能在 Vista 上也存在,但我还没有测试过)。
当用户尝试安装应用程序时,Windows 会以管理员帐户凭据进行提升。这意味着对注册表中的 HKCU(当前用户)所做的任何更改都会被应用到管理员的注册表键上,而不是启动用户的注册表键上。因此,当应用程序在用户帐户下首次启动时,这些键是不可见的。
我们不可能是唯一需要与其安装的应用程序通信的人。难道没有可靠地使用注册表来实现这一目标的方法吗?
我们不能依赖用户在安装后立即启动应用程序,因此将信息作为命令行参数传递也不是可行的解决方案。我能想到的唯一方法是让安装程序以原始用户身份调用实用程序,该实用程序自己获取或设置注册表键;但是这看起来有点儿麻烦。
注意:应用程序需要在使用完这些键后将其删除,因此我不能将它们放在 HKEY_LOCAL_MACHINE 中。