在C#中用模拟打开excel interop
是否有可能在C#中用模拟打开excel interop。 我想打开excel应用程序来运行C#程序运行的其他帐户以外的其他帐户。默认情况下,它将在运行C#程序的同一用户帐户下打开。
MyApp = new Excel.Application(); MyApp.Visible = false; MyApp.DisplayAlerts = false; MyBook = MyApp.Workbooks.Open(@"C:\Sample.xlsx");
任何其他的方式来做到这一点也欢迎。
为了从后面的代码中获得模拟上下文,可以使用advapi32.dll
一些非托pipe函数。
- 调用
LogonUser
以获取用户令牌 - 根据用户令牌创build
WindowsIdentity
- 在窗口标识上调用
Impersonate
。 这将返回一个WindowsImpersonationContext
,稍后可用于Undo
模拟 - 在这里调用你的代码。
- 撤消模拟(
ctx.Undo();
)并释放资源。
真糟糕,你不觉得吗?
幸运的是,你不必重造井。 Uwe Keim写了一个类,在保持可重用性的同时完成了上述所有步骤
一个用于模拟用户的小型C#类
using ( new Impersonator( "username", "domainName", "password" ) ) { /* code that executes under the new context */ }