C# 更改生成选项是否会移动应用程序位于本地计算机软件注册表项中的位置?

C# 更改生成选项是否会移动应用程序位于本地计算机软件注册表项中的位置?,c#,.net,visual-studio-2010,registry,C#,.net,Visual Studio 2010,Registry,我有一个解决方案,其中可执行文件的目标平台最初设置为x86,许多其他项目设置为AnyCPU,并在.NET3.5(其他所有.NET4.0)中包括3个项目。我猜想这就是安装程序写入HKEY\U LOCAL\U MACHINE\SOFTWARE注册表项的原因 最近,我修复了一些问题,现在所有的项目都是.NET4.0。此外,我将可执行目标平台设置为AnyCPU。我发现应用程序现在安装在HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node中 [侧栏-我们有p/invoke

我有一个解决方案,其中可执行文件的目标平台最初设置为
x86
,许多其他项目设置为AnyCPU,并在.NET3.5(其他所有.NET4.0)中包括3个项目。我猜想这就是安装程序写入
HKEY\U LOCAL\U MACHINE\SOFTWARE
注册表项的原因

最近,我修复了一些问题,现在所有的项目都是.NET4.0。此外,我将可执行目标平台设置为AnyCPU。我发现应用程序现在安装在
HKEY\U LOCAL\U MACHINE\SOFTWARE\Wow6432Node

[侧栏-我们有p/invokes-
DllImport
属性-但没有 指定一个
调用约定
。当在中和 托管和非托管代码指定
Cdecl
\uu Cdecl
,我们能够 将相关项目升级到.Net 4.0,而不会收到
pinvokestacks
异常。]

我们目前使用VS2010在Windows 7(64位)计算机上开发。 我的问题是:安装程序最初是不是写了
\SOFTWARE\
,因为有些项目是.NET3.5


此外,如果此应用程序打算安装在WindowsXP(预计支持32位)计算机上,注册表项是否有问题?更好的是,我应该寻找哪些内置选项来确保在WinXp 32位系统上的兼容性?

在64位操作系统上,只有64位安装程序才能避免Wow6432Node。在由安装程序的TargetPlatform属性设置的安装项目中,它默认为“x86”。如果将C#EXE项目的目标平台更改为AnyCPU,请将其更改为“x64”。这还将确保您的程序安装到c:\program文件,而不是c:\program文件(x86)

因此,您需要维护两个安装程序。有点头疼,可以通过将C#EXE项目的目标平台设置为x86来避免它,这样安装程序和程序都可以访问Wow6432Node中的密钥


pinvoke问题通常与此相反,64位代码只有一个调用约定,cdecl和stdcall之间没有区别。

只有64位安装程序才能避免64位操作系统上的Wow6432Node。在由安装程序的TargetPlatform属性设置的安装项目中,它默认为“x86”。如果将C#EXE项目的目标平台更改为AnyCPU,请将其更改为“x64”。这还将确保您的程序安装到c:\program文件,而不是c:\program文件(x86)

因此,您需要维护两个安装程序。有点头疼,可以通过将C#EXE项目的目标平台设置为x86来避免它,这样安装程序和程序都可以访问Wow6432Node中的密钥


pinvoke问题通常是另一种情况,64位代码只有一个调用约定,cdecl和stdcall之间没有区别。

关于p/invoke:我必须找到可能有其他建议的链接,并引导我解决问题。:)接受的回答使我在DllImport通话中进行了一些更正,并设置了通话约定。然后,收到一个编译器错误…找不到“XxxEntryPoint”,我将属性更改为
\uu cdecl
,以匹配托管调用约定。关于p/invoke:我必须找到可能有其他建议的一两个链接,并引导我解决问题。:)接受的回答使我在DllImport通话中进行了一些更正,并设置了通话约定。然后,收到一个编译器错误…找不到“XxxEntryPoint”,我将属性更改为
\uu cdecl
,以匹配托管调用约定。