【问题标题】:Another knack on the "Dialogs must be user-initiated" Security Exception in Silverlight printingSilverlight 打印中“对话框必须由用户启动”安全异常的另一个诀窍
【发布时间】:2010-11-06 15:04:36
【问题描述】:

当我尝试在 Silverlight 中打印某些内容时,我得到了臭名昭著的“对话框必须由用户启动”安全异常。如您所见,该对话框尽可能由用户启动:

John Papa couldn't help me much out neither,因为我没有设置任何断点。 Mr MSDN thinks it could also be that I'm just taking too long,但这是一个尽可能简单的演示应用程序。

有什么想法吗?我想这是 Visual Studio 的一个怪癖,可能是一些扩展干扰,因为当我在它之外启动应用程序时,事情似乎工作正常。我首先想到的可能是代码合同干扰了他们的 IL 编织,但他们在这个项目中被停用了。

更新:这只是一个从文件系统本地运行的简单 Silverlight 应用程序。当我执行“开始调试”时,Visual Studio 会在 Debug resp 中创建一个包含 Silverlight 应用程序的托管 HTML 文件。项目的发布文件夹,使用该 HTML 文件启动 Internet Explorer 并将调试器附加到它。

更新 2:当我创建一个 Web 项目来托管 Silverlight 应用程序并在 IIS 上为其创建一个虚拟目录时,我也遇到了同样的错误。

我可能还想补充一点,无论托管方案如何,我在其他 Silverlight 项目中的打印都没有问题。

更新 3:我下载了 FireFox 并且它可以工作,但我在使用它进行调试时没有收到错误消息。所以它似乎与我的IE8有关。我上传了解决方案:

http://dl.dropbox.com/u/10401470/Code/Demos/PrintingDemo.zip

不知道有没有人可以复制?

有人知道我应该向哪个团队提交错误报告吗?银光队? IE团队? VS Debugger 团队?

【问题讨论】:

  • 是宿主机引发的异常。 BrowserService.GetBrowserHandle() 方法返回 Windows 错误,拒绝访问。虽然当然要排除故障。而且很难回答,因为您根本没有描述您的托管方案。
  • @Hans Passant - 我用有关“托管方案”的更多信息更新了问题。
  • 你没有提到当你让它创建一个 ASP.NET 网站时发生了什么。
  • @Hans Passant - 我遇到同样的错误,请参阅更新。
  • 我不知道,我无法重现异常。我用Win7、Firefox、VS2010、SilverLight4、UAC关闭。

标签: visual-studio silverlight internet-explorer printing debugging


【解决方案1】:

我能够重现这一点。您已经处理了两次单击,一次在 XAML 中,另一次在代码中。查看您的 MainPage.xaml

<Button x:Name="PrintButton"
   Content="Gotta print 'em!" Margin="8" 
   Click="PrintButton_Click" />

不要为此感到难过。我上次是通过循环内的错误打印来做到的。

【讨论】:

  • 哇,这么多年过去了,就是这样,谢谢。当您盲目地复制和修改一些示例代码时,您就会得到这样的结果。不过仍然是一个奇怪的错误,因为它仍然直接在事件处理程序中执行,因此它应该只打印两次。
【解决方案2】:

我也经历过这种奇怪的行为。标准按钮单击事件立即调用OpenFileDialog。它在调试时经常会产生相同的错误,但最终会在多次单击按钮时被哄着工作。

但是,当构建为发行版(或者可能只是通过运行相同的 Xap 而没有附加到浏览器的调试器)时,问题就会消失。

【讨论】:

  • 这些是已知的错误吗?如果没有,应该向哪个团队提交错误报告?银光队? IE团队? VS Debugger 团队?
【解决方案3】:

尝试删除

if(SightPaleceListBox.Items.Count &gt; 0)

【讨论】:

  • 感谢您查看,但不,我当时已经尝试过,今天我仍然遇到同样的错误。不过,这些天我要为 VS2010 安装 SP1,也许它会工作。
【解决方案4】:

我遇到了同样的问题,发现原因是下面这行:

cnvsMain.Children.Remove(PrintPagePlaceHolder);

cnvMain 位于用户按下“打印”按钮的页面上(我试图将其从该页面中删除,以便将其添加到我要打印的画布中)。

我的提示:尝试逐行注释,直到找到导致问题的行。比尝试解决它。

【讨论】:

  • 谢谢,但我已经尝试将所有内容删除到示例项目中尽可能少的代码中。不过我没有尝试最新的更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多