我正在开发一个需要沙盒化应用程序的项目。我能够创建一个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下运行。
任何想法?
答案 0 :(得分:1)
该帐户是否对您使用的资源进行了预设?它是否具有读取和写入目录的能力?
在这些类型的情况下,99%的时间都是预审问题。
答案 1 :(得分:1)
您最好将该服务作为域帐户运行,该帐户具有IO操作所需的权限(包括ACL权限)。
在下面的示例中,“Alterter”服务设置为作为本地服务帐户运行。在您的情况下,我建议将服务作为DOMAIN \ UserAccount运行。
alt text http://www.windows-xp-services.com/images/propertieslogon.gif