模拟作为服务运行的用户时,Excel无法正确启动

时间:2015-04-29 14:41:38

标签: c# excel winapi windows-services

我不建议将Excel作为服务运行。 : - )

问题:从Windows服务启动Excel确实可以正常工作。即使是多个实例也可以无缝地并行工作。问题出现在必须对Analysis Services运行查询。遗憾的是,不使用http协议时,不使用Analysis Services连接的用户ID /密码属性。 MSAS Ole Db Connection传递正在运行的进程的用户。这使得不仅需要从服务启动Excel,还需要事先进行模拟。 (如果有人在这里有更好的想法,欢迎你!)

让Excel被模拟c#中的Process.Start不再起作用,因为它在引擎盖下使用CreateProcessWithLogonW,在尝试加载用户配置文件时作为服务运行时会出现Access Denied错误消息。

步骤:

  1. LogonUser
  2. Impersonate
  3. LoadUserProfile
  4. GetEnvironmentBlock
  5. CreateProcessAsUser
  6. 问题毕竟不是Excel根本不启动或提供错误消息,它只是没有任何窗口。线程可用但没有窗口可以迭代。

    那里有人有经验吗?

    注意:

    1. 如果代码是必要的,我很乐意添加它,它很多,所以到目前为止我还没有添加它。
    2. 代码运行正常,当我不模仿但是从当前进程中检索令牌并从中创建主令牌时,Excel将无缝启动
    3. 有谁知道如何找出Excel挂起的原因? eventlog,procmon或procexp都没有显示任何有用的信息。
    4. 登录总是在没有错误消息的情况下工作(我尝试过LOGON32_LOGON_INTERACTIVE以及_SERVICE以及其他人)
    5. 对于模拟,我使用了ImpersonateLoggedOnUser以及没有不同行为的c#变体
    6. 感谢。

0 个答案:

没有答案