无法加载可执行文件

时间:2013-11-15 15:02:25

标签: c# .net windows service process

我正在尝试创建一个打开应用程序的服务,但是我没有运气。因此,我下载了以下示例代码,并尝试基于它创建服务。但是,它也不起作用。发生的是代码执行,但是永远不会调用可执行文件(在下面的例子中,计算器没有打开)。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading.Tasks;

namespace Open_Calculator
{
    public partial class Service1 : ServiceBase
    {
        public static Process process;
        public Service1()
        {
            //InitializeComponent();
            string[] args = { "1", "2" };
            OnStart(args);
        }
        protected override void OnStart(string[] args)
        {
            start_calc();
        }
        protected override void OnStop()
        {
        }
        static protected void start_calc()
        {
            process = new Process();
            process.StartInfo.FileName = @"C:\Windows\system32\calc.exe";
            process.StartInfo.CreateNoWindow = true;
            process.StartInfo.ErrorDialog = false;
            process.StartInfo.RedirectStandardError = true;
            process.StartInfo.RedirectStandardInput = true;
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            process.Start();
        }
    }
}

在控制台应用程序中复制粘贴的完全相同的代码可以正常工作。

该服务设置为与桌面交互,并设置为“LocalSystem”运行。

运行该服务的帐户在我测试时可以访问C:\Windows\System32。 Process.Start()不返回任何错误,并且calc没有在后台运行(通过任务管理器检查)

2 个答案:

答案 0 :(得分:0)

使用“以管理员身份运行”权限执行

答案 1 :(得分:0)

这个问题一直是令人非常沮丧的原因,我终于解决了我的问题。是的,我已经设法使服务加载GUI应用程序,即使每个人都说这是不可能的。虽然有一个警告 - “修复”可以被视为利用Windows中的漏洞,因为我使用的代码基本上通过了Vista和Windows 7 UAC。从本质上讲,应用程序始终以完全权限执行并绕过UAC。

如果有人遇到同样的问题,您需要做的是在PC上迭代登录用户列表,并选择在此会话(具有用户桌面)中打开UI应用程序,而不是在会话中0应该运行服务(并且没有桌面)。

对于某些人来说,这可能不是一个解决方案,因为它不安全。但就我而言,安全性不是主要问题,我只需要它来工作(必须是强制服务)。

希望这可以帮助那些遇到同样问题的人。