2014-09-06 22 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

感謝大家和雷米勒博特別是對他們的幫助。

相關問題