我有一个C#WindowsForms应用程序,它使用Properties.Settings.Default
来存储应用程序和用户设置。读取和编写自定义用户值的工作正确。
应用程序设置为在系统启动或用户登录时自动运行。这就是问题所在:当应用程序在系统启动时启动时,它无法加载任何特定于用户的设置。他们都设置为默认值。当我关闭应用程序并重新启动它时 - 所有用户设置都恢复了。
调试和记录后,我缩小了问题:在正常启动时,应用程序的工作目录设置为安装到的目录。在系统启动(或用户登录)工作目录设置为C:\system32
(或类似)。未加载用户设置的时间。
这是一个正确的行为吗?如果是这样,我将如何正确加载(或重新加载)用户设置?
注意:我的应用程序与ClickOnce一起部署,因此我无法真正控制设置文件的存储位置。此外,我不会在版本升级之间持续存在任何问题。
答案 0 :(得分:2)
找到了解决方案,虽然我不确定它是多么“正确”。
在我的应用程序中,当用户点击“启动时启动”复选框选项时,我将以下内容写入注册表:
string keyname = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
RegistryKey key = Registry.CurrentUser.OpenSubKey(keyname, true);
key.SetValue("MyApp", Application.ExecutablePath.ToString());
当我将应用路径更改为:
时,问题已得到解决var startPath = Environment.GetFolderPath(Environment.SpecialFolder.Programs)
+ @"\Published\App.appref-ms";
key.SetValue("MyApp", startPath);
我认为这与ClickOnce应用程序的典型启动方式有关。我使用桌面快捷方式启动应用程序,而不是直接运行exe文件。