代码之家  ›  专栏  ›  技术社区  ›  Greg D

让我的clickonce应用程序获得部分信任值得吗?

  •  2
  • Greg D  · 技术社区  · 16 年前

    TextBox 带有提示文本。目前提供此功能的最简单方法是使用 文本框 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每次尝试评估 安全例外 属性抛出另一个不可检查的 .

    我尝试标准修改:

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

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

    如果是这样的话,这值得我们付出代价吗 气力 以部分信任为优先权开发此应用程序?或者我应该在安装时让自己接受一个提升提示来创建一个完全受信任的应用程序,以满足日程安排和ui要求吗?

    2 回复  |  直到 16 年前
        1
  •  5
  •   JaredPar    16 年前

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

    在一个不需要部分信任的场景中设置一个新的部分信任环境只会为您自己增加额外的开销。除非有特定的客户需求,内联网应用不太可能,否则我会避免。

        2
  •  1
  •   Henk Holterman    16 年前

    声明

    permission.Assert();
    

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