是否有可能提升IE .NET Add-on的安全性?

时间:2011-10-31 16:03:24

标签: c# .net security internet-explorer

我有一个C#/ .NET(VS2010)IE插件,它使用Marshal.GetActiveObject()到正在运行的应用程序实例(COM对象),然后通过Invoke()方法向它发送命令。在XP中它工作正常。在W7 / Vista中,它要求IE和目标应用程序都是“以管理员身份运行”,否则它会生成异常:

[Operation unavailable (Exception from HRESULT:0x8000401E3 MK_E_UNAVAILABLE))]

以下是代码:

private void _BtnPlace_onclick(IHTMLEventObje)
{
    ....
    ....
    object AutoCADApp = null;
    try
    {
        // Does not return the object from the Running Objects Table unless run 'As Administrator'

        AutoCADApp = System.Runtime.InteropServices.Marshal.GetActiveObject("AutoCAD.Application");
    }  
    catch (Exception ex)
    {
        MessageBox.Show("Unable to locate a running version of AutoCAD on this machine. Please make sure AutoCAD is running.\n\n [" + ex.Message + "]\n", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
        return;
     } 

    object acadDoc = GetProperty(AutoCADApp, "ActiveDocument");
    InvokeMethod(acadDoc, "SendCommand", keyin);
}

有关如何解决安全问题的任何想法,使这个附加组件在W7 / Vista中运行(要求它提示提升权限)是否正确?

2 个答案:

答案 0 :(得分:0)

也许在黑暗中拍摄,但你读过这段代码项目文章: http://www.codeproject.com/KB/vista-security/ElevatedPrivilegesDemand.aspx

答案 1 :(得分:0)

要考虑几点:

  1. 使用早期绑定而不是反射,调用方法。
  2. 检查是否有其他代码需要“以管理员身份运行”权限。
  3. 尝试使用.NET SendStringToExecute()
  4. 检查您尝试调用的命令是否具有一定的安全性     顾虑。