编辑Skype的config.xml

时间:2015-07-16 08:44:29

标签: c# .net file acl skype

我试图从代码中编辑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.

1 个答案:

答案 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;