exe更改位置时应用程序设置重置

时间:2016-05-13 11:29:23

标签: c# forms config

您好我使用Visual Studio配置文件,但每次移动exe时设置都会更改。

我该如何解决这个问题?

的app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="GUIChangerUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
    </startup>
    <userSettings>
        <GUIChangerUI.Properties.Settings>
            <setting name="StarmadePath" serializeAs="String">
                <value>default</value>
            </setting>
            <setting name="GuiPath" serializeAs="String">
                <value>Not selected yet.</value>
            </setting>
            <setting name="FirstStart" serializeAs="String">
                <value>True</value>
            </setting>
            <setting name="jpeg" serializeAs="String">
                <value>default</value>
            </setting>
            <setting name="debug" serializeAs="String">
                <value>default</value>
            </setting>
            <setting name="Darktheme" serializeAs="String">
                <value>False</value>
            </setting>
            <setting name="Lightheme" serializeAs="String">
                <value>True</value>
            </setting>
            <setting name="starmadeStarter" serializeAs="String">
                <value />
            </setting>
            <setting name="_starmadeStarter" serializeAs="String">
                <value />
            </setting>
            <setting name="OSMTheme" serializeAs="String">
                <value>False</value>
            </setting>
        </GUIChangerUI.Properties.Settings>
    </userSettings>
</configuration>

3 个答案:

答案 0 :(得分:4)

包含已保存配置设置的实际配置文件存储在此处:

%APPDATA%\Local\<application name>\<application name>.<eid>_<hash>\<version>

根据this MSDN article:

  

<eid>是URL,StrongName或Path,基于可用于哈希的证据   <hash>是从CurrentDomain收集的证据的SHA1哈希值,按以下优先顺序排列:
  强名称
  URL
  如果这些都不可用,请使用.exe路径。

(我的重点)

所以解决方案似乎很简单:

  

创建一个强名称并签署您的可执行文件。

然后,每次都会获得相同的唯一哈希值,并且只要从新位置启动可执行文件,它就不会更改。

如果您需要帮助签署您的申请,请参阅此MSDN文章:How to: Sign an Assembly with a Strong Name

答案 1 :(得分:1)

这种行为是设计原因,因为您可能有多个版本的应用程序(例如QA版本,PROD版本等)需要不同的设置存储。有关详细信息,另请参阅Client Settings FAQ

如果您需要一个独立于您应用的位置/版本的设置管理,我建议您创建自己的设置文件并将其存储在“%appdata%[company] [application]”

下面

答案 2 :(得分:1)

用户设置将存储在用户的个人资料中,以便链接应用程序的位置。这就是为什么移动时应用程序不再找到设置的原因。

您可以尝试做的是:

  1. 创建一个名为SettingsUpgradeRequired的新用户设置,并在Visual Studio的设置设计器中将其设置为true
  2. 在应用程序的启动代码中,检查SettingsUpgradeRequired是否为true,如果是,请执行设置升级。
  3. 由于新设置在重置设置文件后为真,因此以下内容应导入旧设置,并且只应执行一次:

    if (Properties.Settings.Default.SettingsUpgradeRequired)
    {
        try
        {
            Properties.Settings.Default.Upgrade();
            Properties.Settings.Default.SettingsUpgradeRequired = false;
            Properties.Settings.Default.Save();
        }
        catch (...)
        {
           ... // Upgrade failed - tell the user or whatever
        }
    }