ASP.NET中模拟管理员用户提升权限

在asp.net的站点中需要调用本地EXCEL的COM组件,由于NetworkService用户的权限不够,在执行Shapes.AddPicture方法(图片大于33K左右)时会长时间无响应,需要用administrator用户来启动Excel进程才行。

上网查了一些资料,发现可以利用advapi32.dll来在asp.net应用中模拟administrator用户来启动Excel的进程,这样执行Shapes.AddPicture方法就正常了。

模拟用户的代码如下:

using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Security.Permissions;


private const int LOGON_TYPE_INTERACTIVE = 2;
private const int LOGON_TYPE_PROVIDER_DEFAULT = 0;
[DllImport("advapi32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
static public extern bool LogonUser(string userName, string domain, string password, int logonType, int 

logonProvider, ref IntPtr accessToken); 


public ExcelExport(string tableName)
{
    IntPtr accessToken = IntPtr.Zero;
    if (LogonUser("administrator", "domain", "password", LOGON_TYPE_INTERACTIVE, LOGON_TYPE_PROVIDER_DEFAULT, ref 

accessToken))
    {

        using (WindowsIdentity identity = new WindowsIdentity(accessToken))
        {
            using (WindowsImpersonationContext context = identity.Impersonate())
            {
                this.m_tableName = tableName;
                if (ExcelRS == null)
                {
                    ExcelRS = new Microsoft.Office.Interop.Excel.ApplicationClass();
                    ExcelRS.Visible = false;
                    ExcelRS.DisplayAlerts = false;
                    ExcelRS.Interactive = false;
                    ExcelRS.DisplayInfoWindow = false;
                }
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值