【问题标题】:Building C# for Windows 7 32 bit platform on Windows 7 64 bit machine在 Windows 7 64 位机器上为 Windows 7 32 位平台构建 C#
【发布时间】:2011-12-21 15:50:51
【问题描述】:

在 Windows 7 64 位机器上使用 Visual Studio 2010 为 Windows 窗体应用程序构建安装程序以在 Windows 7 32 位机器上安装和运行的正确方法是什么?

我刚刚使用 SQL Express 2005 在 Windows XP 上构建了一个使用了 3 年的 Visual Studio 2008 应用程序。

我已将其更新到 VS2010、SQL Express 2008,并在 Windows 7 64 位机器上重新构建。它需要在 Windows 7 32 位平台上运行。

数据库的设置项目在运行时一直失败(在启动时),说它仅适用于 x64 机器。 (应用程序的设置运行正常并安装。)

我已经完成了解决方案中的每个项目,并将其设置为使用 x86(而不是任何 CPU)构建。我已经删除了所有先决条件。唯一值得怀疑的是一个 DB CustomAction 项目(它运行 db 脚本)。

通过谷歌搜索,在我看来,它是在具有“任何 CPU”的 64 位机器上构建的,这意味着它应该生成将通过 WOW 在 32 位机器上运行的设置文件?并且不必做出我一直在做的所有改变?我是否遗漏了一些非常明显的东西?

谢谢。

【问题讨论】:

    标签: visual-studio-2010 windows-7 64-bit installation 32-bit


    【解决方案1】:

    试试这个:

    • 在解决方案资源管理器中选择您的设置项目
    • 转到其属性窗格
    • 确保 TargetPlatform 设置为 x86

    【讨论】:

      【解决方案2】:

      我总是觉得遇到相同问题的帖子令人沮丧,但我从未发布过解决方案。所以我会发布我发现的东西,以防有一天它对其他人有用。我发现许多其他开发人员报告了漫无目的的 Windows 7 程序“已停止工作”消息。

      顺便说一句,我发现测试部署应用程序和安装程序的最简单方法是构建一台 Virtual PC 机器,其配置与最终运行平台的配置相同。然后复制该虚拟 PC,并在副本上测试运行。这样,我可以随时删除副本,从原件重新复制并快速重新开始。

      是的,正如 Cosmin 所说,解决方案的 TargetPlatform 属性也需要设置为 x86。无论如何,没有解决问题,该应用程序仍然产生“已停止工作”的消息。

      接下来我检查了 SQL 日志 ERRORLOG 文件 (c:\Program Files\Microsoft SQL Server\MSSQL10.SQLExpress\MSSQL\Log),它报告应用程序正在尝试使用混合模式身份验证登录,而 SQL 设置为Windows 身份验证。现在我知道我在安装 SQL Express 时选择了混合模式,因为我的应用程序使用我的 db 安装程序为其创建帐户的 sql 服务帐户。所以不知何故,这被某事改变了(不知道是什么?)。要通过 SQL Server Management Studio 设置为混合模式,只需右键单击实例,选择安全性,然后更改服务器身份验证。如果没有 Management Studio,您需要编辑注册表 HKEY_LOCAL_MACHINE/Software/Microsoft/Microsoft SQL Server//MSSQLServer,并为 Mixed 编辑键 LoginMode = 2。再一次,没有解决问题,应用程序仍然产生“已停止工作”消息。

      接下来,我偶然发现一些关于此消息的帖子可能是在启动期间通过在 Windows 7 上加载 32 位应用程序引起的。我将 MessageBoxes 和 Try/Catchs 放在了第一行,但它们从未显示出来,并且没有发现任何错误。

      接下来我尝试在我的 exe 上运行 DependencyWalker。它报告缺少 2 x 32 位文件:IEShims.dll 和 GPSVC.dll。其他开发人员的帖子遇到了这个问题,最终结果是我在 C:\Windows\winsxs 中找到了它们(GPSVC.dll 被称为 x86_microsoft-windows-g..licy-base.resources_31bf3856ad364e35_6.1.7600.16385_en-us_c10af1bed239c523_gpsvc.dll .mui_0c160ac2)。我将它们放到 C:\Windows\System32 中,重新编译了我的应用程序,将其部署到我的测试机上,它终于运行了!

      仍然不明白为什么只是将它们放入我的开发盒上的 System32 目录使应用程序在测试机器上运行?但无论如何,它解决了问题,希望这对其他人有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-01
        • 2011-01-30
        • 2011-09-02
        • 2012-02-20
        • 2013-06-11
        • 2011-12-08
        • 2013-09-19
        • 1970-01-01
        相关资源
        最近更新 更多