.NET'设置'无法在64位上运行(InvalidOperationException)

时间:2011-03-01 22:02:54

标签: c# .net 64-bit settings save

我正在构建一个C#.NET(VS2010)应用程序,但在64位Windows 7下保存设置(在32位Windows XP下工作正常)时遇到了一些问题。

我在解决方案中有一个Settings.settings,其中一个名为res112text的设置测试值在用户范围内设置为类型字符串,其中“Internal”作为访问修饰符设置。

然后是

中的save命令
Properties.Settings.Default.res112text = "10002b";
try
{
   Properties.Settings.Default.Save();
}
catch (Exception e)
{
   MessageBox.Show(e.GetType().ToString() + " for " + e.Message.ToString());
}

当被捕时立即显示错误类型:

System.InvalidOperationException

,对于异常消息,它说:

Method failed with unexpected error code 3

我正在安装安装程序中打包.dll.config文件,它会安装到Program Files目录中。

有人可以建议可能出现的问题吗?

更新:完整错误是..

Error System.InvalidOperationException: Method failed with unexpected error 
code 3. 

at System.Security.AccessControl.NativeObjectSecurity.CreateInternal(
ResourceType resourceType, Boolean isContainer, String name, SafeHandle 
handle, AccessControlSections includeSections, Boolean createByName, 
ExceptionFromErrorCode exceptionFromErrorCode, Object exceptionContext)

at System.Security.AccessControl.FileSecurity..ctor(String fileName, 
AccessControlSections includeSections)

...

at System.Configuration.SettingsBase.Save()

at MyAddon.IEModule.ConfigSave()

更新:启用IE的保护模式时似乎没有解决方法,除非所有用户都手动关闭它。

2 个答案:

答案 0 :(得分:5)

您的问题可能是由于保存文件的权限不足造成的。像Hans Passant建议的那样,你应该看一下隔离存储:http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragefile.aspx

隔离存储的目的是允许具有有限权限的应用程序保存数据。 MSDN页面包含一个代码示例,可以让您启动并运行。

答案 1 :(得分:0)

如果没有DLL“user.config”文件,我可以使用Save()方法,但是当有一个文件时我不能这样做。因此,解决方法可能是手动删除“user.config”文件(这是奇怪的工作)

System.IO.File.Delete(System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.PerUserRoaming).FilePath);

然后使用Save()方法创建一个新的“user.config”文件。 如果有捕获,请告诉我,但到目前为止我还没有注意到。