C# .NET';设置';无法在64位上工作(InvalidOperationException)

C# .NET';设置';无法在64位上工作(InvalidOperationException),c#,.net,64-bit,settings,save,C#,.net,64 Bit,Settings,Save,我正在构建一个C#NET(VS2010)应用程序,但在64位Windows7下的一些保存设置(在32位WindowsXP下可以正常工作)有问题 我在解决方案中有一个Settings.Settings,其设置测试值名为res112text in,在用户范围内设置为type string,访问修饰符设置为“Internal” 然后在 Properties.Settings.Default.res112text = "10002b"; try { Properties.Settings.Defa

我正在构建一个C#NET(VS2010)应用程序,但在64位Windows7下的一些保存设置(在32位WindowsXP下可以正常工作)有问题

我在解决方案中有一个Settings.Settings,其设置测试值名为res112text in,在用户范围内设置为type string,访问修饰符设置为“Internal”

然后在

Properties.Settings.Default.res112text = "10002b";
try
{
   Properties.Settings.Default.Save();
}
catch (Exception e)
{
   MessageBox.Show(e.GetType().ToString() + " for " + e.Message.ToString());
}
捕获后立即显示错误类型:

System.InvalidOperationException
对于异常消息,它说:

方法失败,出现意外错误代码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的保护模式启用时,似乎没有解决办法,除非所有用户都手动将其关闭。

您的问题可能是因为没有足够的权限保存文件。正如Hans Passant所建议的,您应该看看独立存储:

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

如果没有DLL“user.config”文件,我可以使用Save()方法,但如果已经有DLL“user.config”文件,我就不能这样做。因此,解决方法可能是手动删除“user.config”文件(这很奇怪)

然后使用Save()方法创建一个新的“user.config”文件。
请告诉我是否有问题,但到目前为止我还没有注意到任何问题。

错误的异常消息,但是是的,让Explorer插件在独立存储以外的任何地方创建文件都是一个失败的尝试。名称冲突也不是不可能的。您会使用什么方法?我尝试将设置保存在文件中,但我尝试的每件事都被一个系统拒绝了。有人能建议我使用的方法的解决方案吗?如果设置是Visual Studio的内置功能,那么我无法理解为什么它不是推荐的存储方法?看起来IE的保护阻止了它的工作。我将研究实施独立存储,谢谢。
System.IO.File.Delete(System.Configuration.ConfigurationManager.OpenExeConfiguration(System.Configuration.ConfigurationUserLevel.PerUserRoaming).FilePath);