【发布时间】: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