5

我正在开发一个需要对应用程序进行沙盒处理的项目。我能够创建一个 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 下运行。

有任何想法吗?

4

2 回答 2

1

该帐户是否具有您正在使用的资源的权限?它有读写目录的能力吗?

在这些类型的情况下,99% 的时间是前提问题。

于 2010-01-17T04:07:49.520 回答
1

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

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

替代文字
(来源:windows-xp-services.com

于 2010-01-17T07:40:54.870 回答