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 ; } } } } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)