2014-04-29 89 views
1

當我們嘗試通過PsExec在遠程計算機上運行.Net 4.0應用程序時,我們看到一個間歇性問題。 目標計算機是安裝了.Net 4.0和.Net 4.5的Windows Server 2008 SP2 64位。使用.Net應用程序通過PsExec發生間歇性災難性故障例外

我已經被告知,自從.Net 4.5安裝以來,這種情況一直在發生,但是我對這個項目很陌生,所以我不能確定這是什麼時候問題開始發生。

是沒有做這個代碼:

var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
return (ParameterData)config.GetSection("ParameterData"); 

這裏的堆棧跟蹤:

System.Configuration.ConfigurationErrorsException: An error occurred loading a configuration file: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED)) ---> System.Runtime.InteropServices.COMException: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED)) 
    at System.Security.Policy.PEFileEvidenceFactory.GetLocationEvidence(SafePEFileHandle peFile, SecurityZone& zone, StringHandleOnStack retUrl) 
    at System.Security.Policy.PEFileEvidenceFactory.GenerateLocationEvidence() 
    at System.Security.Policy.PEFileEvidenceFactory.GenerateEvidence(Type evidenceType) 
    at System.Security.Policy.AssemblyEvidenceFactory.GenerateEvidence(Type evidenceType) 
    at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type) 
    at System.Security.Policy.Evidence.GetHostEvidence(Type type, Boolean markDelayEvaluatedEvidenceUsed) 
    at System.Security.Policy.AppDomainEvidenceFactory.GenerateEvidence(Type evidenceType) 
    at System.Security.Policy.Evidence.GetHostEvidenceNoLock(Type type) 
    at System.Security.Policy.Evidence.RawEvidenceEnumerator.MoveNext() 
    at System.Security.Policy.Evidence.EvidenceEnumerator.MoveNext() 
    at System.Configuration.ClientConfigPaths.GetEvidenceInfo(AppDomain appDomain, String exePath, String& typeName) 
    at System.Configuration.ClientConfigPaths.GetTypeAndHashSuffix(AppDomain appDomain, String exePath) 
    at System.Configuration.ClientConfigPaths..ctor(String exePath, Boolean includeUserConfig) 
    at System.Configuration.ClientConfigurationHost.get_ConfigPaths() 
    at System.Configuration.ClientConfigurationHost.GetStreamName(String configPath) 
    at System.Configuration.BaseConfigurationRecord.InitConfigFromFile() 
    --- End of inner exception stack trace --- 
    at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal) 
    at System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors) 
    at System.Configuration.Configuration..ctor(String locationSubPath, Type typeConfigHost, Object[] hostInitConfigurationParams) 
    at System.Configuration.ClientConfigurationHost.OpenExeConfiguration(ConfigurationFileMap fileMap, Boolean isMachine, ConfigurationUserLevel userLevel, String exePath) 
    at System.Configuration.ConfigurationManager.OpenExeConfigurationImpl(ConfigurationFileMap fileMap, Boolean isMachine, ConfigurationUserLevel userLevel, String exePath, Boolean preLoad) 
    at System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel userLevel) 

在我們的自動化測試版本部署過程這是執行。我已經能夠將它解釋爲執行上述代碼的簡單可執行文件,並且我從Windows 7開發機器調用PsExec,但問題是間歇性的。 如果我在PsExec的調用之間等待幾分鐘,似乎會更頻繁地發生。我今天開始考慮這個問題,並且能夠在早上很好地複製它,但在下午不太容易。

我也看到了類似的警告事件日誌:

的Windows檢測到您的註冊表文件仍在由其他應用程序或服務的使用。該文件現在將被卸載。之後保存您的註冊表文件的應用程序或服務可能無法正常運行。

詳細信息 - 1個用戶註冊表句柄從\註冊\用戶\糠泄露: 處理5568()已開通鍵\ REGISTRY \ USER \糠

我不知道該事件日誌錯誤是如何相關例外,如果有的話。

的PSEXEC命令行是:PSEXEC/ACCEPTEULA \\ myServerName -d「path_to_exe」

我想知道,如果它與用戶配置文件服務的一個問題,所以我在想打電話時不加載配置文件PsExec,但由於它是如此的間歇性,我不知道如何知道我是否修復了它。 搜索互聯網顯示,有些人認爲這可能與模仿有關,但沒有什麼直接符合我的情況。

有沒有人看過類似的東西?這真的很奇怪。

謝謝! 菲爾

+0

錯誤代碼是沒有意義的,這是一個環境問題。片狀網絡連接和惡意反惡意軟件應該位於列表頂部。實際的代碼位於CLR內部,請致電Microsoft支持部門以獲取更好的理論。 –

回答

1

,如果它工作時運行時在本地而不是遠程運行有一種可能性:

當使用PSEXEC遠程機器上的程序被限制爲150MB的內存

在遠程計算機上運行此將允許遠程命令使用超過150 MB的內存:

set-item wsman:localhost\Shell\MaxMemoryPerShellMB 2048