VS2010部署项目:多用户安装和注册表项的问题

时间:2012-03-06 06:02:51

标签: visual-studio-2010 registry windows-installer setup-deployment

我在Visual Studio 2010中设置部署项目时遇到问题。我使用的是Windows 7 x64。这是我的问题:

设置应该为所有用户安装我的程序。在安装过程中,三个注册表项被写入 HKEY_LOCAL_MACHINE / Software / Something文件夹,其中包含Serial,Name和Organization的设置变量值 - [COMPANYNAME],[PIDKEY],[USERNAME]。< / p>

会发生什么:

User1(Admin)安装软件,输入用户名,序列号和公司名称。一切正常。可以使用Registry.LocalMachine.OpenSubKey(path)找到密钥并通过程序读取值。我没有得到的第一件事是我找不到使用regedit.exe的注册表项。无论如何,上面的代码找到了它们。

现在,User2(非管理员)尝试执行刚安装的程序。安装程序再次启动,说“等待......配置......”。 User2的用户特定文件夹已正确创建。程序已启动,但程序无法再找到注册表项。

现在,最后,User1再次尝试打开程序。 (无法再找到注册表项。)编辑:注册表项实际上存在,但其值为空。

所以,我的问题:

  1. 为什么我不能在安装后看到带有regedit的注册表项,尽管它们显然在那里?
  2. (2。当第二个用户第一次尝试启动程序时,为什么删除了注册表项?我该如何避免?)

    编辑: 2.当第二个用户第一次尝试启动程序时,为什么注册表值设置为空字符串?如何避免这种情况?

    来自奥克兰的干杯,谢谢!

    马克

2 个答案:

答案 0 :(得分:2)

  1. 如果在x64计算机上安装了32位软件包,则可能缺少注册表项。在这种情况下,注册表项将在“HKLM \ Wow6432Node ...”下重定向。这是x64 Windows计算机的标准行为。文件重定向到程序文件和程序文件(x86)也是如此。

  2. 这很奇怪。可能会发生第二次启动安装程序(正常的自动修复操作)错误地删除了注册表项。要获得有关第二次启动期间执行的操作的更多详细信息,我建议您在操作系统上启用永久日志记录。 http://support.microsoft.com/kb/223300

答案 1 :(得分:1)

  

不知道为什么Find-function找不到键?

如果所有值都为空,可能使用的API是考虑键不存在。你应该查看它的文档。

  

显然,“第二个安装程序”再次执行该条目,而没有值。你知道如何解决这个问题吗?

如果使用公共属性中的值编写注册表,通常会发生这种情况。在自动修复期间,属性没有初始安装值,因此它们被认为包含空字符串,而不是用于替换注册表值。

您唯一的解决方案是在修复期间创建一个小的自定义操作,即立即执行操作,在注册表项被覆盖之前搜索它们并将其值放在您正在使用的属性中。这样,覆盖操作将使用正确的值。