Невозможно создать сайт с помощью powershell в оконном сервисе - PullRequest
1 голос
/ 22 августа 2011

Хочу создать сайт в IIS, используя скрипт powershell. Я пишу этот код в оконной службе.

protected override void OnStart(string[] args)
    {
        string sitename = "rajesh";
        //To create a New site
        //Powershell script
      string script = "cd\\\n" + "import-Module WebAdministration \n" + "IIS:\n" + "New-item iis:\\Sites\\rajesh -PhysicalPath C:\\inetpub\\wwwroot\test -bindings @{Protocol='http';bindingInformation='*:8080:" + sitename + "'}" + "\n add-content C:\\Windows\\System32\\drivers\\etc\\Hosts '127.0.0.1 " + sitename + "'";

    string s = RunScript(script);

    }

    private static string RunScript(string scriptText)
    {
        Runspace runspace = RunspaceFactory.CreateRunspace();
        runspace.Open();
        Pipeline pipeline = runspace.CreatePipeline();
        pipeline.Commands.AddScript(scriptText);
        pipeline.Commands.Add("Out-String");            
        Collection<PSObject> results = pipeline.Invoke();
        runspace.Close();
        StringBuilder stringBuilder = new StringBuilder();
        foreach (PSObject obj in results)
        {
            stringBuilder.AppendLine(obj.ToString());
        }
        return stringBuilder.ToString();
    }

Но когда я пытаюсь запустить эту оконную службу в списке служб ... Она выдает ошибку .. Службы на компьютере locat запускаются и останавливаются ..... Когда я изменяю сценарий powershell для создания папки или небольшого размера Задача, то эта оконная служба работает, но когда я пытаюсь создать веб-сайт через этот powershell .. он выдает ошибку, и оконная служба не может быть запущена. Этот сценарий powershell работает в powershell. Но не в оконной службе ..

Ответы [ 2 ]

0 голосов
/ 22 августа 2011

Здесь есть пара вещей, на которые стоит обратить внимание, и я думаю, что вы, возможно, не понимаете некоторые аспекты служб Windows:

  1. OnStart неместо для размещения любой логики.Это событие есть, чтобы вы могли инициализировать службу.Например, запуск фонового рабочего потока, который будет выполнять основную логику службы и отвечать на внешние запросы.Например - запуск прослушивателя TCP или инициализация .NET Remoting или WCF.

  2. OnStart вызывается только один раз при запуске службы.

  3. OnStart должен вернуться в течение 30 секунд, хотя ваш код инициализации может запросить дополнительное время .

Вы вызываете PowerShell и надстройку WebAdministration длясоздавать сайты.Хотя это выполнимо, это неуклюже, возможно, вам следует подумать о вызове непосредственно в управляемый API IIS7:

Microsoft.Web.Administration Namespace

Вот пример создания сайта с использованием управляемого API:

using (ServerManager serverManager = new ServerManager())
{
  Site site = serverManager.Sites.Add("My Web Site", "C:\\inetpub\\wwwroot\test", 80);
  site.Bindings.Clear();
  site.Bindings.Add("*:8080:", "http");
  serverManager.CommitChanges();
}

Следует также отметить, что любые задачи по настройке, выполняемые в IIS, требуют, чтобы учетная запись, выполняющая это, имела повышенные привилегии, т.е. была администратором или, если этослужба запускается под учетной записью SYSTEM.

0 голосов
/ 22 августа 2011

Ошибка будет полезна.

Sitename также не является переменной, это атипо здесь или в коде?

Вы можете попробовать заменить \ n на; Кроме того, PowerShell не использует это как новую строку, хотя я думаю, что C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...