我即将开始的针对内部客户在组织内部使用的ClickOnce应用程序的工作。我想缓和安装过程,所以我想开发应用程序被部分受信任将是一个不错的主意,但现在我不那么肯定。

的一件事是,用户所特别要求是(归结为)与提示文本一个TextBox。此刻提供最简单的方法是用TextBox的一个简单的子类,包括CueText的功能属性。所述cuetext功能经由PInvoke'd调用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属性会另一个uninspectable 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被“列入”而不是“默认区”,我甚至都不需要手动断言,一切只是发生。但当然,我认为客户仍然会得到提升提示。

是否有可能做什么我试图从部分信任的环境中吗?我开始怀疑,这不是二/三它甚至没有任何意义。任意部分受信任的代码应该不能只是调用SendMessage函数,对不对?我开始意识到,我一直在试图绕过它们内部的保安措施,而不是工作。

如果是这样的话,是它甚至值得的工作的开发此应用程式部分信任为优先?或者我应该辞职自己上设置的提升提示创建的日程和会见UI需求的缘故?

完全受信任的应用
有帮助吗?

解决方案

声明

permission.Assert();

只能授予你的线程权限已经提供给大会。这就是为什么不起作用。

所以:是的,你需要包括在组件级别的权限。而像JaredPar说,你还不如用完全信任。

其他提示

如果您正在部署一个Intranet应用程序我绝对不认为这是值得的,与部分信任的情况一团糟。部分信任往往是很难理解,可以并处不存在明显的局限性,以你的代码。当我必须的组件部署到现有部分信任环境我只使用它。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top