在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以获取用户令牌
  • 根据用户令牌创buildWindowsIdentity
  • 在窗口标识上调用Impersonate 。 这将返回一个WindowsImpersonationContext ,稍后可用于Undo模拟
  • 在这里调用你的代码。
  • 撤消模拟( ctx.Undo(); )并释放资源。

真糟糕,你不觉得吗?

幸运的是,你不必重造井。 Uwe Keim写了一个类,在保持可重用性的同时完成了上述所有步骤

一个用于模拟用户的小型C#类

 using ( new Impersonator( "username", "domainName", "password" ) ) { /* code that executes under the new context */ }