Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模拟作为服务运行的用户时,Excel无法正确启动_C#_Excel_Winapi_Windows Services - Fatal编程技术网

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

C# 模拟作为服务运行的用户时,Excel无法正确启动,c#,excel,winapi,windows-services,C#,Excel,Winapi,Windows Services,我知道,不建议将Excel作为服务运行。:-) 问题:从windows服务启动Excel可以正常工作。甚至多个实例也可以无缝地并排工作。问题产生于对AnalysisServices运行查询的必要性。不幸的是,当不使用http协议时,不会使用Analysis Services连接的用户Id/密码属性。MSAS Ole Db连接传递给正在运行进程的用户。这使得不仅需要从服务启动Excel,而且需要事先进行模拟。(如果有人有更好的想法,欢迎!) 让Excel模拟进程。在c#中启动不再起作用,因为它在引

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

问题:从windows服务启动Excel可以正常工作。甚至多个实例也可以无缝地并排工作。问题产生于对AnalysisServices运行查询的必要性。不幸的是,当不使用http协议时,不会使用Analysis Services连接的用户Id/密码属性。MSAS Ole Db连接传递给正在运行进程的用户。这使得不仅需要从服务启动Excel,而且需要事先进行模拟。(如果有人有更好的想法,欢迎!)

让Excel模拟进程。在c#中启动不再起作用,因为它在引擎盖下使用CreateProcessWithLogonW,这导致在尝试加载用户配置文件时作为服务运行时出现拒绝访问错误消息

步骤:

  • 登录者
  • 冒充
  • LoadUserProfile
  • GetEnvironmentBlock
  • CreateProcessAsUser
  • 问题毕竟不是Excel根本没有启动或给出错误消息,它只是没有任何窗口。线程可用,但没有可迭代的窗口

    有没有人有这方面的经验

    注:

  • 如果代码是必要的,我很乐意添加它,它是一堆,所以我没有添加到目前为止
  • 代码运行良好,当我不模拟而是从当前进程检索令牌并从中创建主令牌时,Excel将无缝启动
  • 有人知道如何找出Excel挂起的原因吗?eventlog、procmon或procexp都没有显示任何有用的信息
  • 登录总是在没有错误消息的情况下工作(我尝试了登录32\u logon\u INTERACTIVE以及\u服务以及其他)
  • 对于模拟,我使用了ImpersonateLoggedOnUser以及c#变体,没有不同的行为

  • 谢谢。

    在任务栏管理器中检查进程的会话id?它不应为0,进程id应与winlogon.exe进程相同。另一方面,虽然线程和进程运行良好,但您不会看到任何UI。几乎可以肯定,它试图显示某种UI,但失败了。这就是为什么服务不支持它的主要原因之一——Excel是作为用户应用程序编写的,希望能够提示用户输入。您可以通过确保每个将被模拟的用户至少直接登录到此计算机一次并启动Excel(以通过任何初始设置活动)来解决此问题。@vendettamit:会话id必须为0,因为它应作为服务运行。当在某个用户的会话下运行时,将无法再控制/访问该进程。@Damien_the_unsiever:奇怪的是,当系统模拟/加载用户配置文件等时,它确实可以正常工作。当我以编程方式执行时,它只是失败了。当我使用已登录的帐户并再次尝试模拟它时(例如,使用登录\新建\凭据),它甚至会失败。当然,先决条件是打开Excel一次,然后才能像这样执行—配置了DCOM/打印机。我真正建议的是重新设计。你自己在问题中承认它不受支持。因此,找到另一种方法来实现总体目标,而不包括“从服务运行Excel”。