1

実行可能ファイルのターゲット プラットフォームが最初に に設定されx86、他の多くのプロジェクトが AnyCPU に設定され、.Net 3.5 に 3 つのプロジェクトが含まれていたソリューションがあります (それ以外はすべて .Net 4.0)。これが、インストーラーがHKEY_LOCAL_MACHINE\SOFTWAREレジストリ キーに書き込みを行った理由だと思います。

最近、いくつかの問題を修正し、すべてのプロジェクトが .Net 4.0 になりました。さらに、実行可能なターゲット プラットフォームを AnyCPU に設定しました。アプリケーションが にインストールされていることがわかりましたHKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node

[サイドバー - p/invokes -DllImport属性 - が指定されていないCallingConvention. これがマネージ コードとアンマネージ コードの両方で および を指定するように変更されたときCdecl、例外__cdeclを受け取ることなく、依存プロジェクトを .Net 4.0 にアップグレードすることができましたPInvokeStackImbalance。]

現在、Windows 7 (64 ビット) マシンで VS2010 を使用して開発しています。私の質問は次のとおりです。一部のプロジェクトが .Net 3.5 だったので、インストーラー\SOFTWARE\ は最初に書き込みましたか?

また、このアプリケーションが WindowsXP (32 ビットがサポートされる予定) マシンにインストールされることを意図している場合、レジストリ キーに問題はありますか? さらに良いことに、WinXp 32 ビット システムでの互換性を保証するビルド オプションで何を探す必要がありますか?

4

1 に答える 1

1

64 ビット オペレーティング システムで Wow6432Node を回避できるのは、64 ビット インストーラーのみです。インストーラーの TargetPlatform プロパティによって設定されるセットアップ プロジェクトでは、既定で "x86" に設定されます。C# EXE プロジェクトのターゲット プラットフォームを AnyCPU に変更した場合は、「x64」に変更します。これにより、プログラムが c:\program files (x86) ではなく c:\program files にインストールされるようになります。

したがって、2 つのインストーラーを維持する必要があります。C# EXE プロジェクトのターゲット プラットフォームを x86 に設定して、インストーラーとプログラムの両方が Wow6432Node のキーにアクセスできるようにすることで、これを回避できます。

通常、pinvoke の問題は逆です。64 ビット コードには呼び出し規則が 1 つしかなく、cdecl と stdcall の間に違いはありません。

于 2012-07-23T16:54:58.273 に答える