我试图让IEXPLORER.EXE的版本在我DLL.However我得到这样的警告每次的LinkDemand警告
警告1个CA2122:Microsoft.Security:“ApCkr.IEavailable()”调用到'FileVersionInfo.FileMajorPart.get()',它有一个LinkDemand。通过进行此调用,'FileVersionInfo.FileMajorPart.get()'间接暴露给用户代码。回顾下面的调用堆栈,可能会揭露一种方法来规避安全保护:
在MSDN(安全权限)和falgs中搜索加载后,我仍然无法知道我将如何摆脱此错误。我试图
SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
,但不能得到它的工作,要么
任何帮助,将不胜感激
#region IExplore
public string IEavailable()
{
bool IEversion;
FileVersionInfo.GetVersionInfo("C:\\program files\\\\Internet Explorer\\iexplore.exe");
FileVersionInfo myFileVersionInfo = FileVersionInfo.GetVersionInfo("C:\\program files\\\\Internet Explorer\\iexplore.exe");
int a = myFileVersionInfo.FileMajorPart;
if (a < 8)
{
IEversion = false;
}
else
{
IEversion = true;
}
return IEversion.ToString();
}
#endregion
在这里等一下。在尝试消除警告之前:**是否进行了彻底的安全审查?**是否确保即使通过部分受信任的代码间接调用,链接要求的方法的间接暴露也是安全的?警告正试图让你安全。不要问“我怎么关掉这台烟雾探测器?”直到你确定它是虚惊一场;关闭正在运行的正在运行的烟雾探测器是烧毁建筑物的好方法。 – 2012-03-04 16:55:30
@EricLippert我会研究这一点。此外,我不认为一个简单的文件版本查询造成任何主要的威胁 – Cesar 2012-03-04 18:07:42