2015-07-16 2 views
0

Я пытаюсь редактировать файл Skype config.xml из кода. Он отлично работает, но после изменения Skype удалите его и сгенерируйте еще один, отменив все мои изменения. Например, код:Редактировать Skype config.xml

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

ли скайп все еще работает, когда вы изменяете файл? –

+0

Нет, см. Edit, я перезагружаю его, если он запущен –

ответ

1

См https://www.safaribooksonline.com/library/view/skype-hacks/0596101899/ch04s04.html

«Всегда останавливайте Skype запуск (щелкнув правой кнопкой мыши по Skype в системном трее и выбрав Выход) перед внесением каких-либо изменений в config.xml (или shared.xml), потому что даже если ваш редактор может сказать вам, что он сохранил вашу обновленную версию config.xml, вы можете обнаружить, что Skype игнорирует ваши изменения, и они отсутствуют при повторном открытии файла config.xml. Процедура редактирования любых конфигурационных файлов Skype должна выглядеть так: quit Skype (то есть остановить его от запуска), отредактировать (или удалить) файл конфигурации, сохранить изменения и перезапустить Skype ».

C:\Documents and Settings\Username\Application Data\Skype\Skypename\config.xml 

«Существует еще один файл, shared.xml, из которого Skype получает информацию о конфигурации, которая является общей для всех пользователей Skype на одном компьютере Windows ... Вы можете также редактировать этот файл, чтобы настроить, как 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 

"

+0

Я знаю, к сожалению, skype restart не помогает, см. Edit –

+0

@Alex Просто чтобы быть ясным ... вы должны остановить skype ... затем отредактировать файл config.xml. .. затем запустите skype ... просто перезапустите, а затем отредактируйте файл config.xml ничего не достигнет. –

+0

Emm, я редактирую, когда skype отключен, см. 'Action()' между 'Kill()' и 'Start()' –