0

我在Visual Studio 2010中设置我的部署项目时遇到问题。使用Windows 7 x64的Im。这是我的问题:VS2010部署项目:多用户安装和注册表项问题

设置应该为所有用户安装我的程序。在安装过程中,将三个注册表项写入HKEY_LOCAL_MACHINE/Software/Something文件夹,其中包含串行,名称和组织的设置变量值 - [COMPANYNAME],[PIDKEY],[USERNAME]。

会发生什么:

用户1(管理员)安装软件,输入自己的用户名,串行和公司。一切正常。通过使用Registry.LocalMachine.OpenSubKey(path),可以找到钥匙和程序读取的值。我没有得到的第一件事是我无法使用regedit.exe找到注册表项。无论如何,上面的代码找到了它们。

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

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

所以,我的问题:

  1. 为什么我看不到的注册表项与注册表编辑器在安装后,虽然他们显然在那里?

(2.为什么注册表项删除,当第二个用户试图启动程序的第一次,我怎么能避免呢?)

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

来自奥克兰的欢呼和感谢!

马克

回答

2
  1. 您可能忽略的注册表项,如果你已经安装了64台机器上有32位软件包。在这种情况下,注册表项将在“HKLM \ Wow6432Node ...”下重定向。这是x64 Windows机器的标准行为。文件重定向到Program Files和Program Files(x86)也是如此。

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

+0

1.完美,我永远不会那么一个......不知道为什么Find函数没有找到键?无论如何,他们在那里。 User2启动程序后,注册表项仍然存在,但值将被空值覆盖。所以我在问题描述中实际上弄错了:条目在那里,但值被设置为“”。很明显,“第二个安装程序”再次执行该条目,而没有这个值。你有一个想法如何解决? – Marc 2012-03-06 09:06:44

+0

请注意,除非需要64位支持,否则将.NET应用程序编译为x86(而不是“任何”应用程序)而不是对Wow6432Node子项进行硬编码可能更清晰。 – 2012-03-06 12:39:24

1

奇怪为什么查找功能没有找到钥匙,但?

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

很明显,“第二个安装程序”再次执行该条目,而没有值。你有一个想法如何解决?

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

您唯一的解决方法是在修复过程中运行一个小的自定义操作,即立即在注册表条目被覆盖之前进行搜索并将其值放入您正在使用的属性中。这样覆盖操作将使用正确的值。