Как получить BootStrapper.exe работать в Windows Azure?

#asp.net #azure #bootstrapper #application-start

#asp.net #azure #загрузчик #запуск приложения

Вопрос:

Я загружаю bootstrapper.exe от http://bootstrap.codeplex.com / , Мне удается заставить его работать в локальном IIS. В Application_Start() и используйте Process.Start()

Но в Windows Azure вообще не работает. Я уверен, что файл есть, а сообщения об ошибке нет.

но файл не загружается и не разархивируется. Я пробовал как папку «local resource», так и локальную папку

Есть ли у кого-нибудь здесь рабочий код?

Ответ №1:

Прежде всего, вам необходимо иметь bootstrapper.exe как часть вашего проекта (Добавить -> Существующий элемент -> перейти к bootstrapper.exe amp; .config включает их оба). Для свойств этих файлов вы должны установить для «Build Action» значение «None» и для «Copy to output directory» значение «Копировать всегда».

Теперь вы можете использовать следующий код для запуска загрузчика (я делаю это вот так, и это работает):

       internal void SomethingWithBootStrapper()
    {
        //
        Trace.TraceInformation("Trying to install agent...");
        ProcessStartInfo psi = new ProcessStartInfo();
        psi.FileName = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "bootstrapper.exe");
        psi.Arguments = @"-get http://some_url_to_download_something.com/path/to/file.zip -lr $lr(YourLocalResourceKeyHere) -unzip $lr(YourLocalResourceKeyHere)extract -run $lr(YourLocalResourceKeyHere)extractSetup.exe  -args /some /args /for_the_setup.exe -block";
        Trace.WriteLine("Calling "   psi.FileName   " "   psi.Arguments   " ...");
        psi.CreateNoWindow = true;
        psi.ErrorDialog = false;
        psi.UseShellExecute = false;
        psi.WindowStyle = ProcessWindowStyle.Hidden;
        psi.RedirectStandardOutput = true;
        psi.RedirectStandardInput = false;
        psi.RedirectStandardError = true;
        // run elevated
        psi.Verb = "runas";
        try
        {
            // Start the process with the info we specified.
            // Call WaitForExit and then the using statement will close.
            using (Process exeProcess = Process.Start(psi))
            {
                exeProcess.PriorityClass = ProcessPriorityClass.High;
                string outString = string.Empty;
                // use ansynchronous reading for at least one of the streams
                // to avoid deadlock
                exeProcess.OutputDataReceived  = (s, e) =>
                {
                    outString  = e.Data;
                };
                exeProcess.BeginOutputReadLine();
                // now read the StandardError stream to the end
                // this will cause our main thread to wait for the
                // stream to close (which is when ffmpeg quits)
                string errString = exeProcess.StandardError.ReadToEnd();
                Trace.WriteLine(outString);
                Trace.TraceError(errString);
                this._isInitialized = true;
            }
        }
        catch (Exception e)
        {
            Trace.TraceError(e.Message);
            this._isInitialized = false;
        }
    }
  

Пожалуйста, обратите внимание, что это на 100% протестированный и рабочий код!

Комментарии:

1. Спасибо, ваше предложение напомнило мне, я забыл файл «BootStrapper.exe.config». Поскольку это работает в локальном IIS, я больше не думал об этом файле : (

2. @astaykov — из любопытства, почему бы вам не поместить команду в bat-файл и не вызвать из задачи запуска? Это был первоначальный вариант использования, для которого я создал bootstrapper.

3. @dunnry, я его не знаю, но лично я не использую файл .bat, потому что мне нужно получить некоторые аргументы во время выполнения. Спасибо за хороший инструмент, который вы создали.

4. Черт возьми, я могу использовать загрузчик в гораздо более сложном сценарии, чем просто задача запуска 😉 Конечно, я использую также в пакетном файле и для задачи запуска. Эрик, ты можешь получить множество аргументов в задаче запуска, но я согласен, что есть некоторые аргументы, которых у тебя нет до времени выполнения 🙂

5. Понятно. Если вы можете написать мне, я мог бы помочь вам сделать bootstrapper более ценным. Моя конечная цель заключается в том, что вам никогда не нужно вызывать это по процессу. Start() . 🙂