【问题标题】:Is making my clickonce app partial-trust worth it?让我的 clickonce 应用部分信任值得吗?
【发布时间】:2009-10-02 17:41:05
【问题描述】:

我即将开始开发针对内部客户的 ClickOnce 应用程序,以便在组织的 Intranet 上使用。我想简化设置过程,所以我认为将应用程序开发为部分受信任是一个好主意,但现在我不太确定。

用户特别要求的一件事是(归结为)带有提示文本的TextBox。目前提供此功能的最简单方法是使用 TextBox 的简单子类,其中包含 CueText 功能作为属性。 cuetext 功能是通过 PInvoke 调用 SendMessage() 来完成的。

protected override void OnHandleCreated(EventArgs e)
{
    this.UpdateCueText();  // Bang, you're dead here
    base.OnHandleCreated(e);
}

private void UpdateCueText()
{
    if (this.IsHandleCreated)
    {
        NativeMethods.SendMessage(new HandleRef(this, this.Handle), setCueBannerMessage, this.showCueTextWithFocus ? new IntPtr(1) : IntPtr.Zero, this.cueText);
    }
}

“啊哈!我需要SecurityPermission.UnmanagedCode。”据我所知,默认的 Intranet 区域安全包括SecurityPermission 权限,所以我尝试运行它,它在调用UpdateCueText() 时爆炸。我什至可以检查SecurityException b/c 上的属性,每次尝试评估SecurityException 属性都会引发另一个不可检查的SecurityException

我试试标准修改:

protected override void OnHandleCreated(EventArgs e)
{
    var permission = new SecurityPermission(SecurityPermissionFlag.UnmanagedCode);
    permission.Assert();
    try
    {
        this.UpdateCue();
    }
    finally
    {
        CodeAccessPermission.RevertAssert();
    }
    base.OnHandleCreated(e);
}

仍然没有运气。但是当我进入项目属性中的安全设置页面并将SecurityPermission设置为“包含”而不是“区域默认”时,我什至不需要手动断言,一切都会发生。但当然,我假设客户仍然会收到海拔提示。

是否有可能在部分信任的环境中做我想做的事情?我开始怀疑这不是 b/c,它甚至没有意义。任意部分受信任的代码不应该只调用 SendMessage,对吗?我开始意识到我一直在试图规避安全措施,而不是在其中工作。

如果是这样的话,是否值得努力以部分信任为优先开发这个应用程序?还是我应该在设置时接受提升提示以创建一个完全受信任的应用程序,以便安排时间并满足用户界面要求?

【问题讨论】:

    标签: c# clickonce pinvoke code-access-security


    【解决方案1】:

    如果您正在部署 Intranet 应用程序,我绝对不认为将部分信任场景弄乱是值得的。部分信任往往难以理解,并且可能对您的代码施加不明显的限制。我只在必须将组件部署到现有的部分信任环境中时才使用它。

    在不需要的情况下设置新的部分信任环境只会为您自己增加额外的开销。除非有特定的客户要求,对于 Intranet 应用程序不太可能,否则我会避免它。

    【讨论】:

      【解决方案2】:

      声明

      permission.Assert();
      

      只能授予程序集已经可用的线程权限。这就是为什么这不起作用。

      所以:是的,您需要在程序集级别包含这些权限。就像 JaredPar 所说,你不妨使用完全信任。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多