【发布时间】:2017-12-26 19:01:52
【问题描述】:
最近我试用了 Visual Studio 2017。我们有一个 MSDN 订阅。我们正在开发一些我们正在编写为 WPF 应用程序的内部应用程序。这些应用程序需要安装在用户没有管理权限的用户计算机(Windows 7 到 Windows 10)上。在这一点上,对我们伤害最大的事情是在不需要管理员在场的情况下安装 ReportViewer 控件。 VS 2015 及更早版本是不可能的,因为(据我所知)VS 2015 及更早版本,ReportViewer 控件是一个 ActiveX 控件,需要管理员权限才能安装。有人告诉我,在 VS 2017 中,新的 ReportViewer 控件(版本 14)不是 ActiveX 控件。它不需要管理员权限。这是个好消息,我告诉了我的同事们。为了演示这一点,我使用 VS 2017 编写了一个非常简单的 WPF 应用程序。我所做的只是将 ReportViewer 控件放到一个窗口上。最终让它工作确实花了大约 6 周的时间(比它应该做的要长得多),但我使用 ClickOnce 部署将它部署到机器上。
接下来,我想我会向自己证明我可以再做一次,这次我要记录下我做了什么。我已尝试两次复制相同的简单应用程序,但我不断收到以下消息:
这根本不会发生,因为这会让我们回到同样的问题 - 必须有一些管理员在附近才能安装这个应用程序。我们不希望这样。简要介绍一下我采取的步骤:
- 使用 VS 中的包管理器控制台安装了 Microsoft.SqlServer.Types 版本 14.0.314.76。
- 使用包管理器控制台安装了 Microsoft.ReportingServices.ReportViewerControl.Winforms 版本 140.340.80
- 在 XAML 中,我在窗口标记中包含了命名空间 Microsoft.ReportViewer.WinForms。
- 添加了对 System.Windows.Forms 和 WindowsFormsIntegration 的引用
-
在窗口的 Grid 标记中添加了以下 XAML:
设置 ClickOnce 部署
由于涉及中文位置文件的一个bug,我进入了项目的发布选项卡| Application Files 并将所有以“zh-”开头的文件发送到 Exclude for Publish Status。
然后我将它发布到网络共享并在没有使用没有权限的帐户安装旧 ReportViewer 的机器上运行 ClickOnce Setup.exe。
我收到了我在本文开头附近给出的“需要系统更新”消息。
为什么会这样?为什么需要在 GAC 中安装 Microsoft.VisualStudio.Text.Logic?特别是对于一个根本不连接到任何数据库的应用程序?
【问题讨论】:
标签: c# wpf winforms visual-studio clickonce