代码之家  ›  专栏  ›  技术社区  ›  Treb

应用程序从远程文件夹启动时引发SecurityException

  •  3
  • Treb  · 技术社区  · 16 年前

    我有一个用C语言编写的应用程序,它位于网络共享上。当我从本地驱动器运行时,一切正常。当我从远程共享启动它时,

    try
    {
        System.Reflection.Assembly.GetExecutingAssembly();
        System.IO.Directory.GetCurrentDirectory();
    }
    

    引发SecurityException“请求失败”。

    什么导致了这种情况,本地启动的应用程序和远程启动的应用程序有什么区别?

    3 回复  |  直到 16 年前
        1
  •  5
  •   Marc Gravell    16 年前

    这是由于 CAS ;从本地计算机启动的代码比内部网中的代码具有更多的信任,而内部网中的代码又具有更多的来自Internet的信任。

    IIRC,带有最新的SP(3.5SP1?)如果你有 映射 共享(即F:)是可信的;否则您需要:

    答:应用 caspol 更改为所有客户(Yeuck)

    乙:使用 ClickOnce 部署应用程序,然后改为运行.application(yay!)

    关键是,ClickOnce允许您签署应用程序并声明您的安全策略(即使您要求完全信任)。

        2
  •  2
  •   Larry    16 年前

    因为您的应用程序是在共享驱动器上启动的,所以应用了不同的执行安全策略。

    这意味着要了解.NET代码访问安全性是如何工作的。

    http://msdn.microsoft.com/en-us/library/aa302422.aspx

    快速而肮脏的解决方案包括转到.NET框架配置、展开运行时安全策略、展开计算机、代码组、本地化Intranet区域、右键单击该区域、选择属性,然后将权限集更改为完全信任。

    这将允许Intranet区域中的应用程序(包括从共享网络运行的应用程序)以完全受信任的方式运行。

    这绝对不是推荐的方法 . 最好的方法是了解.NET代码访问安全性如何工作,并根据应用程序的需要应用特定的安全策略。

    例如,通过对应用程序进行签名,可以为其提供强名称,使用公钥定义新的代码组,并对该代码组应用完全受信任的权限。然后,您可以使用相同的公钥签署所有“已批准”的应用程序,因此应用相同的代码访问安全策略。

        3
  •  1
  •   Jon Adams    16 年前

    他们在.NET Framework 3.5 SP1中对其进行了某种程度的更改。见 .NET 3.5 SP1 Runs Managed Applications From Network Shares