Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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# 将进程作为网络服务启动_C# - Fatal编程技术网

C# 将进程作为网络服务启动

C# 将进程作为网络服务启动,c#,C#,我正在尝试使用用户网络服务启动一个进程,该服务在本地系统下运行。为此,我使用以下pinvoke操作序列: LogonUser() DuplicateTokenEx() LoadUserProfile() CreateEnvironmentBlock() CreateProcessAsUser() 使用上述步骤,我能够启动流程-我在事件查看器中看到流程创建事件。但是,我正在创建的进程是一个C#应用程序,它生成一个conhost.exe子进程,并可能由于conhost.exe子进程崩溃而立即崩溃(也

我正在尝试使用用户网络服务启动一个进程,该服务在本地系统下运行。为此,我使用以下pinvoke操作序列:

  • LogonUser()
  • DuplicateTokenEx()
  • LoadUserProfile()
  • CreateEnvironmentBlock()
  • CreateProcessAsUser()
  • 使用上述步骤,我能够启动流程-我在事件查看器中看到流程创建事件。但是,我正在创建的进程是一个C#应用程序,它生成一个conhost.exe子进程,并可能由于conhost.exe子进程崩溃而立即崩溃(也显示在事件日志中-崩溃原因是DLL初始化失败)

    我还发现,如果我在我的机器上授予网络服务管理员权限,我就能够使用上面的步骤成功地启动进程

    最后,我还尝试直接从网络服务用户下运行的服务启动相同的进程,在这种情况下,它成功启动。这使我怀疑,我试图启动新流程的上下文中的某些内容是不完整的,我错过了另一个初始化环境的操作


    我的方法有什么明显的错误吗?我是否遗漏了某个步骤?

    问题在于
    STARTUP\u INFO
    结构的
    lpDesktop
    字段设置不正确。如果该值未设置为
    string.Empty
    ,则新进程将尝试使用其无权访问的父进程的桌面。

    关注文件访问错误。网络服务帐户可能无法访问必要的文件,您可以使用Process Monitor检查哪些文件,然后确定是否要更改文件NTFS权限以允许访问。我以前尝试过此操作,没有发现任何立即被拒绝的可疑访问错误。另外,由于在网络服务下运行的服务能够通过process.start()直接成功地启动此进程,问题是它是如何做到的?