WCF саморазместила сервис, класс установщика и netsh

У меня есть саморазмещенное сервисное приложение WCF, которое я хочу развернуть msi пакетом установщика. Конечная точка использует http порт 8888. Для запущения проекта под окнами 2008 после установки, я должен или запустить программу как, администратор или иметь для изменения http настроек с netsh:

"netsh http add urlacl url=http://+:8888/ user=\Everyone"

Я хочу изменить http настройки от своего класса установщика. Поэтому я называю следующий метод от Установки () методом:

    public void ModifyHttpSettings()
    {
        string parameter = @"http add urlacl url=http://+:8888/ user=\Everyone";

        System.Diagnostics.ProcessStartInfo psi =
            new System.Diagnostics.ProcessStartInfo("netsh", parameter);

        psi.Verb = "runas";
        psi.RedirectStandardOutput = false;
        psi.CreateNoWindow = true;
        psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
        psi.UseShellExecute = false;
        System.Diagnostics.Process.Start(psi);
    }

Этот метод будет работать на английские версии окон, но не для локализованных версий (Группа, у Всех есть различные имена в локализованных версиях). Я также попробовал к условиям применения. UserName для предоставления доступа, по крайней мере, для текущего зарегистрированного пользователя. Но это также не работает, потому что класс установщика выполняется msi сервисом, который работает под пользовательской СИСТЕМОЙ. Следовательно Enviroment. UserName возвращает СИСТЕМУ, и это не то, что я хочу.

Существует ли способ предоставить доступ ко всем (или по крайней мере для тока вошел в систему), пользователь к моему саморазмещенному сервису WCF от msi класса установщика?

14
задан Jeldrik 26 March 2010 в 08:40
поделиться

1 ответ

Мой упрек к решению:

    public void ModifyHttpSettings()
    {
        string everyone = new System.Security.Principal.SecurityIdentifier(
            "S-1-1-0").Translate(typeof(System.Security.Principal.NTAccount)).ToString();

        string parameter = @"http add urlacl url=http://+:8888/ user=\" + everyone;

        ProcessStartInfo psi = new ProcessStartInfo("netsh", parameter);

        psi.Verb = "runas";
        psi.RedirectStandardOutput = false;
        psi.CreateNoWindow = true;
        psi.WindowStyle = ProcessWindowStyle.Hidden;
        psi.UseShellExecute = false;
        Process.Start(psi);
    }

SID "S-1-1-0" является хорошо известным SID и расшифровывается как учетная запись "Everyone". Идентификатор безопасности одинаков для всех локализаций окон. Метод Translate класса SecurityIdentifier возвращает локализованное имя учетной записи Everyone.

25
ответ дан 1 December 2019 в 11:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: