4

我正在开发一个概念验证 Web 应用程序:带有一个按钮的网页,该按钮可以打开安装在用户 PC 上的 Word 应用程序。

我在 Visual Studio 2008 Express(Windows XP 客户端、LAMP 服务器)中遇到了一个 C# 项目。我遵循了在 .NET 中编写 ActiveX 控件教程,经过一些调整后它运行良好。然后我添加了用于打开 Word 的按钮。

问题是我可以从项目中引用 Microsoft.Office.Interop.Word,但我无法从网页访问它。错误显示“该程序集不允许部分受信任的调用者”。

我已经阅读了很多关于 .NET 安全性的内容,但我现在完全迷失了。免责声明:我从 4 天前开始使用 .NET。

我试图解决这个问题,但我看不到光!!我什至不知道这是否可能!

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using Word = Microsoft.Office.Interop.Word;

using System.IO;
using System.Security.Permissions;

using System.Security;
[assembly: AllowPartiallyTrustedCallers]

namespace OfficeAutomation
{
    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }

        private void openWord_Click(object sender, EventArgs e)
        {
            try
            {
                Word.Application Word_App = null;
                Word_App = new Word.Application();
                Word_App.Visible = true;
            }
            catch (Exception exc)
            {
                MessageBox.Show("Can't open Word application (" + exc.ToString() + ")");
            }
        }
    }
}
4

2 回答 2

2

使用 .Net Framework 4 + XBAP 可以轻松实现:您可以使用 WPF XBAP 代替 ActiveX。

并在项目设置窗口中执行:签名:取消选中所有框。(此项目不需要签名),在安全选项卡下,只需将其更改为完全信任。

如果他想允许应用程序运行,用户将被提示一次。

于 2011-01-12T04:46:01.273 回答
0

.NET 安全博客中的“如何为 Internet Explorer 托管程序集提供额外信任”一文阐明了这个问题。它的日期是 2003 年,所以现在情况可能会发生变化……我不知道。

但一位评论者问道(2006 年)

是否可以在不更改客户端任何内容的情况下以所有信任权限执行 .net 程序集?我们之前一直在 CAB 中使用签名的 ActiveX,它工作正常,并尝试将其移植到 C#。

肖恩法回答了

不,目前无法提升您在客户端的控制权限。最接近的选项是 ClickOnce,它允许您提示和提升应用程序 - 尽管此应用程序不会在网页中被冲洗。

于 2010-05-11T20:33:12.583 回答