Как использовать subinacl в установщике? Проект установки C # - PullRequest
1 голос
/ 21 октября 2011

Я хочу дать разрешение на мой сервис пользователю / каждому.Я могу использовать subinacl для предоставления таких разрешений, но я не знаю, как кодировать его в классе установщика?

А также, если я хочу дать разрешение каждому пользователю в компе, могу ли я использовать «Все» в качестве пользователя?

Какая система не имеет пользователей - я имею в виду XP без пользователей, тогда как с этим обращаться.

Пожалуйста, помогите мне как можно скорее.Любая помощь высоко ценится.

РЕДАКТИРОВАТЬ: Чтобы дать разрешение, я нашел это: http://ss64.com/nt/subinacl.html и это .Я попробовал на cmd, и это сработало.Чтобы это произошло, я написал следующее:

        WshShell shell = new WshShellClass();
        object wf = IWshRuntimeLibrary.WshWindowStyle.WshHide;
        //object ws = IWshRuntimeLibrary.
        if (allusers)
            shell.Run("subinacl /SERVICE \"OpenVPNService\" /Grant=Everyone=TO", ref wf, true);
        else
            shell.Run("subinacl /SERVICE \"OpenVPNService\" /Grant="+ Environment.UserName +"=TO", ref wf, true);
        shell = null;

Последний параметр - проблема.Мне нужно только передать ссылку на объект.И это означает, чтобы показать окно или нет. Проверьте здесь Я получаю сообщение об ошибке "Аргумент 3: невозможно преобразовать из 'bool' в 'ref object'. Любая идея, что дать в третьем параметре.

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Я использовал Process и добился успеха.Спасибо всем.

0 голосов
/ 21 октября 2011

Установка имени пользователя и пароля на ноль будет означать «каждый пользователь» в случае каждой учетной записи, кроме «Пользователь» (я имею в виду: LocaSystem, LocalService, NetworkService).Или так MSDN говорит:

http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceprocessinstaller.account.aspx

http://msdn.microsoft.com/en-us/library/system.serviceprocess.serviceaccount.aspx

Например:

namespace WindowsService
{
    [RunInstaller(true)]
    public class WindowsServiceInstaller : Installer
    {
        public WindowsServiceInstaller()
        {
            ServiceProcessInstaller serviceProcessInstaller = 
                               new ServiceProcessInstaller();
            ServiceInstaller serviceInstaller = new ServiceInstaller();

            serviceProcessInstaller.Account = ServiceAccount.LocalSystem;
            serviceProcessInstaller.Username = null;
            serviceProcessInstaller.Password = null;

            serviceInstaller.DisplayName = "My New C# Windows Service";
            serviceInstaller.StartType = ServiceStartMode.Automatic;

            serviceInstaller.ServiceName = "My Windows Service";

            this.Installers.Add(serviceProcessInstaller);
            this.Installers.Add(serviceInstaller);
        }
    }
}
...