【问题标题】:How to move an 'user.config' file from source PC to target PC preserving its settings?如何将“user.config”文件从源 PC 移动到目标 PC,保留其设置?
【发布时间】:2015-09-21 07:18:55
【问题描述】:

我有一个第 3 方应用程序,Remove Empty Directory 又名 RED,可在此处下载:

http://sourceforge.net/projects/rem-empty-dir/files/?source=navbar

应用程序的用户设置遵循标准的 .Net 设置基础架构,它将其设置保存在如下目录中:

...\AppData\Local\RED2\RED2.ex_Url_ilre4odeu2sx2xsqyulyx2jybty45cd5\2.2.0.0

我的问题是,当我将应用程序文件夹移动到另一台 PC 时,我会在 user.config 文件中使 ignore_directories 设置持久化,我的意思是我将保留当我将应用程序和设置文件移动到目标 PC 时,我不能只复制存储 user.config 文件的文件夹,因为 user.config 设置将自动存储在具有与源 PC 完全不同的新哈希的新文件夹中,因此目标 PC 中的旧 user.config 文件将被忽略...无法识别。

这是 user.config 文件的默认内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="RED2.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <RED2.Properties.Settings>
            <setting name="last_used_directory" serializeAs="String">
                <value>C:\Users\Administrador\AppData\Local\RED2\RED2.ex_Url_ilre4odeu2sx2xsqyulyx2jybty45cd5\</value>
            </setting>
            <setting name="infinite_loop_detection_count" serializeAs="String">
                <value>10</value>
            </setting>
            <setting name="pause_between" serializeAs="String">
                <value>80</value>
            </setting>
            <setting name="max_depth" serializeAs="String">
                <value>-1</value>
            </setting>
            <setting name="ignore_directories" serializeAs="String">
                <value>System Volume Information
RECYCLER
Papierkorb
Recycled
NtUninstall
$RECYCLE.BIN
GAC_MSIL</value>
            </setting>
        </RED2.Properties.Settings>
    </userSettings>
</configuration>

这是我将持久化/可移植的内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="RED2.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <RED2.Properties.Settings>
            <setting name="last_used_directory" serializeAs="String">
                <value>C:\</value>
            </setting>
            <setting name="infinite_loop_detection_count" serializeAs="String">
                <value>10</value>
            </setting>
            <setting name="ignore_0kb_files" serializeAs="String">
                <value>False</value>
            </setting>
            <setting name="pause_between" serializeAs="String">
                <value>80</value>
            </setting>
            <setting name="max_depth" serializeAs="String">
                <value>-1</value>
            </setting>
            <setting name="keep_system_folders" serializeAs="String">
                <value>False</value>
            </setting>
            <setting name="ignore_directories" serializeAs="String">
                <value>$RECYCLE.BIN
C:\Program Files\WindowsApps\Microsoft.WinJS.2.0_1.0.9600.16384_neutral__8wekyb3d8bbwe\microsoft.system.package.metadata
C:\ProgramData\Microsoft\Crypto
C:\ProgramData\Microsoft\Device Stage
C:\ProgramData\Microsoft\DRM
C:\ProgramData\Microsoft\IdentityCRL
C:\ProgramData\Microsoft\RAC\Temp
C:\ProgramData\Microsoft\Windows\DRM
C:\ProgramData\Microsoft\Windows\Sqm
C:\ProgramData\Microsoft\Windows\Start Menu
C:\Users\Administrador\AppData\Local\Microsoft\CLR_v2.0
C:\Users\Administrador\AppData\Local\Microsoft\Feeds Cache
C:\Users\Administrador\AppData\Local\Microsoft\Windows\AppCache
C:\Users\Administrador\AppData\Local\Microsoft\Windows\Application Shortcuts
C:\Users\Administrador\AppData\Local\Microsoft\Windows\Burn
C:\Users\Administrador\AppData\Local\Microsoft\Windows\Explorer\ThumbCacheToDelete
C:\Users\Administrador\AppData\Local\Microsoft\Windows\INetCache\IE
C:\Users\Administrador\AppData\Local\Microsoft\Windows\Notifications
C:\Users\Administrador\AppData\Roaming\Microsoft\Crypto
C:\Users\Administrador\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch
C:\Users\Administrador\AppData\Roaming\Microsoft\SystemCertificates
C:\Users\Administrador\AppData\Roaming\Microsoft\Windows\AccountPictures
C:\Users\Administrador\AppData\Roaming\Microsoft\Windows\Network Shortcuts
C:\Users\Administrador\AppData\Roaming\Microsoft\Windows\Printer Shortcuts
C:\Users\Administrador\AppData\Roaming\Microsoft\Windows\Recent
C:\Users\Administrador\AppData\Roaming\Microsoft\Windows\Start Menu
C:\Users\Default\AppData\Local\Microsoft\Windows
C:\Users\Default\AppData\Roaming\Microsoft\Windows
C:\Users\Public
C:\Windows\assembly
C:\Windows\Downloaded Program Files
C:\Windows\Help
C:\Windows\ImmersiveControlPanel
C:\Windows\Installer
C:\Windows\Logs
C:\Windows\Microsoft.NET\assembly
C:\Windows\Offline Web Pages
C:\Windows\Resources\Themes\aero
C:\Windows\ServiceProfiles
C:\Windows\servicing
C:\Windows\System32\catroot
C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\CLR_v4.0
C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows
C:\Windows\System32\config\systemprofile\AppData\Roaming\Microsoft\SystemCertificates
C:\Windows\System32\DriverStore\Temp
C:\Windows\System32\LogFiles
C:\Windows\System32\Microsoft\Crypto
C:\Windows\System32\ProximityToast
C:\Windows\System32\RasToast
C:\Windows\SysWOW64\config\systemprofile\AppData\Local\Microsoft\CLR_v4.0_32
C:\Windows\SysWOW64\config\systemprofile\AppData\LocalLow\Microsoft
C:\Windows\SysWOW64\DriverStore\FileRepository
C:\Windows\SysWOW64\ProximityToast
C:\Windows\SysWOW64\RasToast
C:\Windows\Temp
C:\Windows\WinSxS\Backup
C:\Windows\WinSxS\InstallTemp
C:\Windows\WinSxS\Temp
System Volume Information</value>
            </setting>
            <setting name="delete_stats" serializeAs="String">
                <value>3496</value>
            </setting>
        </RED2.Properties.Settings>
    </userSettings>
</configuration>

我的问题是,我可以覆盖设置文件属性或其他可以使 user.config 文件真正可移植的解决方法,从而避免目录哈希问题?

好吧,我很确定这可能是因为我过去使用另一个 .Net 应用程序的另一个 user.config 文件做过,我不记得我到底做了什么,因为它是很多试验和错误,但我认为我所做的是在应用程序文件夹的同一目录中创建一个新的 app.config 文件并复制 user.config 的全部内容 存储在 AppData 目录中到我在应用程序工作目录中的新 app.config 文件中,然后根据我的需要编辑 app.config 中的属性 文件以在应用程序首次运行时在 AppData 目录中创建 user.config 时保留自定义默认值,但该技术不起作用此应用程序 RED2.exe 的时间。

我尝试了一些基本的想法,例如将 user.config 添加到存储 RED2.exe 的同一文件夹中,然后在文件中添加我喜欢的配置,也我做了同样的事情来创建一个 app.config,一切正常,但也许我在这个过程中做错了什么。

【问题讨论】:

  • 不要硬编码路径。使用User Settings。见msdn.microsoft.com/en-us/library/bb397755(v=vs.110).aspx
  • user.settings,顾名思义,专为特定用户设计。如果您想获得便携式版本,我建议您使用 json 序列化或类似的方法自行处理设置。
  • @Console 我的目的是将应用程序添加到个性化安装程序中(使用 InnoSetup),然后在安装时我可以运行在 .Net(VB.Net 或其他 C#)中开发的自动化工具,它可以做的伎俩,问题是......如何?但无论如何,我认为这可以在没有那种交互的情况下完成,无需开发应用程序,只需设计一个适当的 app.config 或 user.config 文件内容,将其复制到另一台 PC 时会持续存在(因为我再次提到我在过去)。谢谢!
  • @theghostofc 抱歉,您是否阅读了我提到它的第 3 方应用程序的部分?我没有使用设置基础结构的源代码。无论如何,谢谢!
  • @ElektroStudios,对不起,我错过了那部分。我的错! RED2 代码可在 Github github.com/hxseven/Remove-Empty-Directories 上获得。您可以下载并稍微调整一下。 :)

标签: .net windows app-config appsettings user-config


【解决方案1】:

如果您可以访问代码,这对您来说会更容易。 RED2 代码可在 Github here 上获得。您可以下载并稍作调整以适合您的目的。

这不是仅链接的答案。作为特定问题的解决方案,访问代码是这种情况下的最佳解决方案。我只是分享一个公开代码库的链接,供大家了解。

【讨论】:

  • 我说赏金奖励对不起我有一个困惑,因为在其他问题中我有赏金。再次感谢,
  • @ElektroStudios,不用担心。我很高兴能帮上忙:)
【解决方案2】:

我通过在https://github.com/hxseven/Remove-Empty-Directories 下载源代码并构建默认ExeName.exe.config 解决了这个问题,然后在其userSettings 部分我可以修改设置以保留默认自定义配置将应用程序目录复制到另一台 PC 时,只需包含包含每个用户设置的 ExeName.exe.config,这非常容易。

这样做的诀窍就是这样。

它似乎与保存每个用户设置时在本地 AppData 文件夹中生成的 user.config 文件没有什么不同,所以我想只有一种更简单的方法是执行在 UI 下进行所需的修改以在 AppData 文件夹中生成文件,然后将生成的 user.config 文件重命名为 RED2.exe.config 并将其存储在应用程序的工作目录,然后将其复制到另一台 PC。

【讨论】:

    猜你喜欢
    • 2012-02-02
    • 2015-07-08
    • 1970-01-01
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多