救急!!C# 代码安全性,System.Security.SecurityException问题
用C#作了一个小程序,在本地机器(本地硬盘)上运行完全正常,可是放到服务器上就出现调试窗口,提示System.Security.SecurityException,抛出异常……,各位大虾怎样解决?在程序中实现,
在.NET Configuration里面可以设置AllCode为FullTrust,可以避免
但我想在程序里面设置,请问如何实现
问题点数:100、回复次数:10Top
1 楼jiezhi(风满袖)回复于 2006-03-08 15:21:32 得分 80
参考:
using System;
using System.Collections;
using System.Security;
using System.Security.Policy;
namespace Vantechsoft.Phoenix.PhoenixFramework.PluginManager
{
public class PluginSecurityManager
{
public PluginSecurityManager()
{
}
public bool SetPathCodeSecurity(string path)
{
try
{
string url=MakePathUrl(path);
PolicyLevel machineLevel=FindMachinePolicy();
//this code will modify when securiity requested
PermissionSet ps=machineLevel.GetNamedPermissionSet("FullTrust");
UrlMembershipCondition umc=new UrlMembershipCondition(url);
CodeGroup pluginCodeGroup=new UnionCodeGroup(umc,new PolicyStatement(ps,
PolicyStatementAttribute.Exclusive|PolicyStatementAttribute.LevelFinal));
pluginCodeGroup.Name="PluginCodeGroup";
if(!machineLevel.RootCodeGroup.Children.Contains(pluginCodeGroup))
{
CreatePluginCodeGroup(machineLevel,pluginCodeGroup,null);
}
else
{
}
}
catch
{
return false;
}
return true;
}
private PolicyLevel FindMachinePolicy()
{
PolicyLevel machineLevel=null;
IEnumerator i=SecurityManager.PolicyHierarchy();
while(i.MoveNext())
{
PolicyLevel level=(PolicyLevel)i.Current;
if(level.Label=="Machine")
{
machineLevel=level;
break;
}
}
return machineLevel;
}
private void CreatePluginCodeGroup(PolicyLevel level,CodeGroup root,string url)
{
level.RootCodeGroup.AddChild(root);
SecurityManager.SavePolicyLevel(level);
}
private void GenerateCodeGroupName(string url)
{
}
private bool FindPluginCodeGroup(string root,string url)
{
return false;
}
private string MakePathUrl(string urlPath)
{
Url url=new Url(urlPath);
return url.Value;
}
}
}
另外参考:
http://jiezhi.cnblogs.com/archive/2005/08/01/204482.html
Top
2 楼justok([热心-冲星])回复于 2006-03-08 15:29:01 得分 15
好象不行的吧,如果程序里可以,那他的安全性就等于白搞了,如果用户把服务器当作信任网站,自动会有FullTrust,或者有可信任的证书Top
3 楼zhangmeimei(雪薇)回复于 2006-03-08 15:36:10 得分 0
谢谢了,高手呀!我试一下
Top
4 楼jiezhi(风满袖)回复于 2006-03-08 15:43:35 得分 0
在楼主的环境下,他是有这个权限的.
这个代码是我以前使用过的Top
5 楼zhangmeimei(雪薇)回复于 2006-03-08 15:48:25 得分 0
谢谢各位的解答
这段程序好像必须知道路径,
但是这是放在服务器上的,路经并不确定
Top
6 楼zhangmeimei(雪薇)回复于 2006-03-08 15:53:26 得分 0
jiezhi(风满袖) 你好
我没有修改服务器的权限的
就是在我的机器上做完后,要放到服务器上去运行,
现在的问题是:在我的本地机器上运行是没有问题的,但是到服务器上,就抛出这个异常,出现调试窗口
不好意思,我刚学C#不久,可能有些地方表达不是很好,请各位高手见谅Top
7 楼jiezhi(风满袖)回复于 2006-03-08 16:01:24 得分 0
如果运行程序的用户没有权限的话,那你的代码就无能为了了.
你可以让管理员通过.net 配置工具设置代码组(code group),设置权限,将你的代码的权限扩大.
路径是很好处理的,你可以通过代码获得自己所在的路径的啊
Top
8 楼hy98521(斯达克)回复于 2006-03-08 16:40:23 得分 5
Directory
里面是路径的库文件Top
9 楼zhangmeimei(雪薇)回复于 2006-03-08 17:34:07 得分 0
TO:jiezhi(风满袖)
那样还是需要管理员设置code group的权限~~~~
不过还是谢谢了,看来还是必须由管理员设置代码的权限了Top
10 楼zhangmeimei(雪薇)回复于 2006-03-09 13:25:19 得分 0
解决方法:设置code group 的属性进行,如果要在intranet运行,将其设为fulltrust(计算机管理--Microsoft.NET Framework 1.1Configuration里设定)
感谢jiezhi(风满袖)
以及各位的帮助
散分了!
Top




