如何在安装程序中使用subinacl? C#设置项目

时间:2011-10-21 09:22:28

标签: c# permissions installer setup-project grant

我想向用户/所有人授予我的服务权限。我可以使用subinacl来授予这样的权限,但是我不知道如何在Installer类中编写代码?

如果我想给comp上的每个用户授予权限,我可以使用“Everyone”作为用户吗?

什么是没有任何用户的系统 - 我的意思是XP没有任何用户,那么如何处理相同的。

请尽早帮助我。任何帮助都非常感谢。

编辑:   为了授予权限,我发现了这一点:http://ss64.com/nt/subinacl.htmlthis。我尝试了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;

最后一个参数给出了问题。我只需要传递一个ref obj。它代表了显示窗口。 Check Here我收到错误“参数3:无法从'bool'转换为'ref object'。任何想法在第3个参数中给出什么。

2 个答案:

答案 0 :(得分:0)

将用户名和密码设置为空将表示除“用户”之外的每个帐户的“每个用户”(我的意思是: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);
        }
    }
}

答案 1 :(得分:0)

我使用了Process并成功完成了任务。谢谢大家。