2014-09-06 64 views
0

我们创建了一个小型Windows程序,用于从互联网网站下载文件。它在大多数个人电脑上都有罚款。在一个特定的客户情况下,该程序失败。如果程序以常规用户或管理员身份运行,但不能作为本地系统运行,则可以下载文件。该程序是Windows服务的一部分,因此必须作为本地系统运行。有问题的PC是域的一部分。我已阅读本地系统是一个匿名帐户,并没有网络访问权限。即使在互联网上访问文件,这可能是问题吗?作为系统运行时,程序不会从互联网下载文件

+1

如果帐号被限制使用互联网服务,它不能以任何代价下载文件,除非它被授予权限! – 2014-09-06 04:00:25

+0

谢谢。我们怎么做到这一点? – user2442193 2014-09-06 04:07:02

+0

通过更改本地帐户的权限并授予其网络服务权限! – 2014-09-06 04:08:54

回答

0

请注意,这应该是一个评论,而不是一个答案,我只是不能评论。
要更深入地了解问题,可以创建一个与您的服务具有相同权限的cmd。默认情况下,这将是本地系统。我想它也适用于PowerShell,但我不清楚它的含义。

sc create debugcmd binpath= "cmd /K start" type= own type= interact 
sc start debugcmd 

最后的命令会给你一个错误信息,类似于The service did not respond to the start or control request in a timely fashion.可以忽略。
这段代码将在会话0中创建一个shell(请参阅Session 0 isolation),但由于我们声明服务是交互式的,因此您可以访问它。从那里你可以开始你的诊断。

此处谨慎的提示:您在该cmd中进行的每个调用都将具有本地系统权限。当您另一个应用程序或以其他方式调用子进程时,它将继承这些权限。

记住,当你完成删除服务,因为它带来了相当大的安全隐患:

sc delete debugcmd 
+0

感谢您的评论。我一直在使用psexec -i -s cmd.exe,我相信这会创建一个作为本地系统运行的cmd。 http://stackoverflow.com/questions/77528/how-do-you-run-cmd-exe-under-the-local-system-account – user2442193 2014-09-06 14:58:18

+0

声明服务交互不会自动免除它从会话0隔离。有一个向后兼容的功能,可以让它按照需要工作,但在Windows 7中它默认是关闭的;要启用它,请启动交互式服务检测服务。 Windows的更高版本中可能不存在此功能。无论如何,'psexec'提供了一个更简单的解决方案。 – 2014-09-06 20:55:06

0

这是一个MS错误。我已经实施了MSDN推荐的解决方案,并且它工作得很好。这是原来的代码:

var filePath = "https://someurlhere"; 
    var xsl = new ActiveXObject("Msxml2.DOMDocument.3.0"); 
    xsl.async = false; 
    xsl.validateOnParse = false; 
    xsl.load(filePath); 

如果当在MSXML服务器端或客户端多核环境进行操作的DOM文档加载XML文件通过HTTP负载方法可能会失败。

解决方法是在xsl.async = false下添加以下语句:

xsl.setProperty("ServerHTTPRequest", true); 

有关详细信息,你可以去这里: http://support.microsoft.com/kb/281142

感谢大家和雷米勒博特别是对他们的帮助。

相关问题