[英]The property '$YourPropertyHere' could not be created from it's default value. Error message: Could not find a part of the path %temp%
情况:windows 服务(在本地系统帐户下运行)开始在客户端服务器上崩溃。 它已经毫无问题地运行了几个月。 我们在 EventLog 中看到的错误是:
故障模块名称:KERNELBASE.dll,版本:6.1.7601.17965,时间戳:0x506dcae6 异常代码:0xe0434352
经过一番搜索后,我们得出的结论是,除了我们的 windows 服务因未处理的异常而崩溃外,这没有任何意义。 幸运的是,我们的 windows 服务记录了所有异常。 在我们的日志文件中,我们发现了这一点:
无法从其默认值创建属性“--removed--”。 错误消息:找不到路径“S:\TEMP\byvqti2p.tmp”的一部分。 资料来源:系统 StackTrace:at
System.Configuration.SettingsPropertyValue.Deserialize()
at System.Configuration.SettingsPropertyValue.get_PropertyValue()
at System.Configuration.SettingsBase.get_Item(String propertyName)
at System.Configuration.ApplicationSettingsBase.get_Item(String propertyName)
部分问题是服务器没有 S: 驱动器。 也许它曾经做过,但我们真的不知道。
作为测试,我们尝试在我们的帐户下运行 Windows 服务。 那行得通!
所以问题与本地系统帐户有关。 解决方案来了:
打开环境变量屏幕。 查看系统变量并找到“TEMP”和/或“TMP”。 这是我们找到“S:\\Temp”的地方。 我们将其更改为“C:\\Temp”,就像 Windows 服务在本地系统下再次运行一样。
我有一个类似的问题,尽管是通过 RDP 启动程序(不是作为服务启动)。 错误信息是:
The property 'YourPropertyHere' could not be created from it's default value. Error message: Could not find a part of the path. 'C:\Users\MyName\AppData\Local\Temp\2\ymapg21h.tmp'.
(注意 - 错误的拼写出现在消息中,不是我的错字)。
目录C:\Users\MyName\AppData\Local\Temp\2
不存在,这是%TEMP%
和%TMP%
的值。 所以它似乎是 .NET 中的一个错误,试图从AppName.config
文件初始化属性会引发异常,如果%TEMP%
不存在则失败。
我的应用程序中引发异常的确切代码是:
var list = Properties.Settings.Default.YourPropertyHere.Cast<string>().ToList();
该属性是StringCollection
。 string
属性不会出现此问题。
Raymond Chen 在https://devblogs.microsoft.com/oldnewthing/20110125-00/?p=11673中谈到了%TEMP%
末尾数字的原因。 该文章中描述的一种解决方法是禁用通过组策略编辑器将数字添加到%TEMP%
末尾的功能。
我使用的解决方法是在Application.Run
调用之前将以下代码放入Main()
中(C#;并且需要using System.IO;
)
try
{
Directory.CreateDirectory(Path.GetTempPath());
}
catch(Exception)
{ }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.