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

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

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

模拟用户的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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;
                }
            }
        }
    }
}
posted @   wang_yb  阅读(2707)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示