从Windows服务失败的用户运行进程被拒绝?

时间:2010-01-17 03:57:29

标签: c# windows-services process sandbox

我正在开发一个需要沙盒化应用程序的项目。我能够创建一个Windows用户,创建一个目录,用一个应用程序填充该目录,并以用户身份运行该应用程序。这可以作为控制台应用程序完全正常运行,但当我将其作为服务安装时,我得到了这个例外:

System.ComponentModel.Win32Exception: Access is denied
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()

抛出此异常的代码是:

_process = new Process
     {
     StartInfo =
        {
            Arguments = "",
            CreateNoWindow = true,
            ErrorDialog = false,
            FileName = instanceDirectory + "program.exe",
            WorkingDirectory = instanceDirectory,
            UseShellExecute = false,


            UserName = GetUserNameForInstance(_id),
            Password = GetPasswordForInstance(_id),
            Domain = ""
        },
    EnableRaisingEvents = true
    };

_process.Exited += ProcessExited;
_process.Start();

同样,这仅在作为Windows服务运行时抛出。根据Windows中的“服务”面板,该服务在LOCAL SYSTEM下运行。

任何想法?

2 个答案:

答案 0 :(得分:1)

该帐户是否对您使用的资源进行了预设?它是否具有读取和写入目录的能力?

在这些类型的情况下,99%的时间都是预审问题。

答案 1 :(得分:1)

您最好将该服务作为域帐户运行,该帐户具有IO操作所需的权限(包括ACL权限)。

在下面的示例中,“Alterter”服务设置为作为本地服务帐户运行。在您的情况下,我建议将服务作为DOMAIN \ UserAccount运行。

alt text http://www.windows-xp-services.com/images/propertieslogon.gif