我试图从代码中编辑Skype的config.xml
文件。它工作正常,但更改后Skype删除它并生成另一个,撤消我的所有更改。例如,代码:
public Core()
{
try
{
var processes = Process.GetProcessesByName("Skype");
if (processes.Length == 0)
{
AddRegistryKeys();
RemovePlaceholder();
}
else
{
RestartSkypeAndRun(processes[0],
() =>
{
AddRegistryKeys();
RemovePlaceholder();
});
}
Environment.Exit(0);
}
catch (Exception ex)
{
MessageBox.Show(string.Format("{0} - {1}", ex.GetType(), ex.Message), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Environment.Exit(-1);
}
}
private static void RemovePlaceholder()
{
string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string skypePath = Path.Combine(appDataPath, "Skype");
foreach (var configPath in Directory.EnumerateFiles(skypePath, "config.xml", SearchOption.AllDirectories))
{
string userConfig = File.ReadAllText(configPath);
string fixedConfig = userConfig.Remove("<AdvertPlaceholder>1</AdvertPlaceholder>");
File.Move(configPath, configPath + ".bak");
File.WriteAllText(configPath, fixedConfig);
}
}
private static void RestartSkypeAndRun(Process skypeProc, Action action)
{
string skypeExePath = skypeProc.Modules[0].FileName;
skypeProc.Kill();
skypeProc.WaitForExit();
Thread.Sleep(TimeSpan.FromMilliseconds(500)); //just in case
action();
Process.Start(skypeExePath);
}
那怎么办呢?我不知道,除了阻止文件修改,例如更改文件的ACL和其他权限,设置readonly属性e.t.c.
答案 0 :(得分:1)
请参阅https://www.safaribooksonline.com/library/view/skype-hacks/0596101899/ch04s04.html
&#34;在对config.xml(或shared.xml)进行任何更改之前,始终阻止Skype运行(通过右键单击系统托盘中的Skype并选择退出),因为即使您的编辑可能会告诉您它保存了更新版本的config.xml,您可能会发现Skype忽略了您的更改,并且在重新打开config.xml时它们丢失了。编辑任何Skype配置文件的过程应如下所示:退出Skype(即停止运行),编辑(或删除)配置文件,保存更改,然后重新启动Skype。&#34 ;
C:\Documents and Settings\Username\Application Data\Skype\Skypename\config.xml
&#34;还有另一个文件shared.xml,Skype从中获取同一台Windows机器上所有Skype用户通用的配置信息...您还可以编辑此文件以调整Skype的行为方式,但是调整的范围比config.xml更有限。您通常可以在每个平台上的这些位置找到shared.xml:
Windows(版本1.3及之前版本)
C:\Documents and Settings\All Users\Application Data\Skype\shared.xml
Windows(版本1.4及之后)
C:\Documents and Settings\Username\Application Data\Skype\shared.xml
&#34;