单击一个报表查看器错误

时间:2015-03-30 14:27:26

标签: c#

我设置

Microsoft System CLR Types for sql server 2012 x86 
Microsoft System CLR Types for sql server 2012 x64

作为Click Once部署的先决条件。它似乎在x64机器上工作正常,但它在x32位机器上崩溃,下面有以下消息。想知道我该如何解决这个问题?

sql server 2012 x64的组件Microsoft CLR类型无法安装,并显示以下错误消息: "此处理器类型不支持此安装包。请与您的产品供应商联系。"

成功安装了以下组件: sql server 2012 x86的Microsoft System CLR类型

未安装以下组件: Microsoft报表查看器2012运行时

以下组件安装失败: sql server 2012 x64的Microsoft System CLR类型

2 个答案:

答案 0 :(得分:1)

如果您只想显示来自C#应用程序的报告,则使用了错误的包。部署报表查看器组件的最简单方法是将它们包含在ClickOnce部署中。

转到部署设置并转到“应用程序文件”选项卡,并将部署状态切换为“包含”,以“Microsoft.Report *”开头的程序集。

enter image description here

请注意我使用的是德语Visual Studio - 我上面引用的标签实际上可能有不同的名称。

答案 1 :(得分:0)

这是因为您尝试在32位计算机上安装64位应用程序。在安装之前检查机器正在运行的内容,然后设置需要安装的应用程序。

这是你如何从C#

检查机器运行的类型
static bool is64BitProcess = (IntPtr.Size == 8);
static bool is64BitOperatingSystem = is64BitProcess || InternalCheckIsWow64();

[DllImport("kernel32.dll", SetLastError = true, CallingConvention = CallingConvention.Winapi)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool IsWow64Process(
    [In] IntPtr hProcess,
    [Out] out bool wow64Process
);

public static bool InternalCheckIsWow64()
{
    if ((Environment.OSVersion.Version.Major == 5 && Environment.OSVersion.Version.Minor >= 1) ||
        Environment.OSVersion.Version.Major >= 6)
    {
        using (Process p = Process.GetCurrentProcess())
        {
            bool retVal;
            if (!IsWow64Process(p.Handle, out retVal))
            {
                return false;
            }
            return retVal;
        }
    }
    else
    {
        return false;
    }
}