Проблемы развертывания ClickOnce

Вот генератор, который выдает нужные вам куски:

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

import pprint
pprint.pprint(list(chunks(range(10, 75), 10)))
[[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
 [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
 [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
 [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
 [50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
 [60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
 [70, 71, 72, 73, 74]]

Если вы используете Python 2, вы должны использовать xrange() вместо range() :

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in xrange(0, len(l), n):
        yield l[i:i + n]

Также вы можете просто использовать списочное понимание вместо написания функции, хотя это хорошая идея для инкапсуляции таких операций в именованные функции, чтобы ваш код было легче понять. Python 3:

[l[i:i + n] for i in range(0, len(l), n)]

Версия Python 2:

[l[i:i + n] for i in xrange(0, len(l), n)]
16
задан Peter Mortensen 7 May 2013 в 19:49
поделиться

6 ответов

Я тоже пытался решить проблему «Я не знаю URL-адрес развертывания клиента clickonce во время сборки».

Лучшее, что я могу придумать (я только начал писать так что это все еще предположение) заключается в том, чтобы написать утилиту, которую будет запускать конечный пользователь, которая установит DeploymentURL. Кажется, это возможно в .NET, но вам необходимо:

  • Прочитать манифест с помощью ManifestReader.ReadManifest
  • установить DeploymentUrl
  • ManifestWriter.WriteManifest

Затем вы должны снова подписать манифест с помощью SecurityUtilities. SignFile

Меня беспокоит процесс подписания. Либо мне нужно использовать одноразовый сертификат (что делает подписание бессмысленным), либо мне нужно использовать сертификат из ЦС, а затем я должен распространить свой пароль, чтобы отказаться от манифеста (что глупо, поскольку это делает мой сертификат небезопасным) .

6
ответ дан 30 November 2019 в 23:05
поделиться

Чтобы создавать приложения ClickOnce в нашей системе непрерывной сборки и развертывать их на нескольких тестовых серверах, я потратил некоторое время на Mage и статью Пошаговое руководство: развертывание вручную Приложение ClickOnce .

Я не уверен, что это решит вашу вторую проблему, но это может, по крайней мере, облегчить процесс сборки, если вы развернете на нескольких серверах. Если вы можете распространять mage.exe (не уверен, разрешает ли это Microsoft), вы можете изменять свои манифесты на месте во время установки.

5
ответ дан 30 November 2019 в 23:05
поделиться

Второй вопрос:

Вы можете использовать цель публикации MSBuild в проекте, решении или файле MSBuild следующим образом:

C:\WINDOWS\Microsoft.NET\Framework\v3.5\msbuild.exe "C:\path\foo.vbproj" /target:Publish /property:"PublishUrl=http://clickonce/is/kinda/cool/" /property:"PublishUrl=http://clickonce/is/kinda/cool/" 

PublishUrl - это место, где будет размещаться приложение. опубликовано в IDE. Он вставляется в манифест приложения ClickOnce, если не указано ни свойство InstallUrl , ни UpdateUrl .

InstallUrl (не показано) - это место, в которое пользователи будут устанавливать приложение из. Если указано, это значение записывается в загрузчик setup.exe , если включено свойство IsWebBootstrapper. Он также вставляется в манифест приложения, если UpdateUrl не указан.

Первый вопрос:

Если приведенный выше ответ не отвечает вашим потребностям, то мне кажется, что вы столкнулись с типичной проблемой; как получить исполняемый файл Windows (в вашем случае .NET Framework 3.5), установленный на нескольких рабочих столах. Существует несколько решений, например сценарии Group Policy (GP) или WMI .

0
ответ дан 30 November 2019 в 23:05
поделиться

Если пользователи находятся в домене, тогда я бы попросил системного администратора выдвинуть .NET 3.5 с помощью групповых политик / Центра обновления Windows или любой другой стратегии, используемой для управления рабочими столами.

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

Если организация этого не делает. Если у вас есть человек в этой роли, я верю, что вы вернулись к своему ручному решению. Кроме того, выполнение этого вручную не обязательно нарушает «все преимущества ClickOnce» ... Преимущества ClickOnce заключаются в том, что вы можете изменять клиента, повторно публиковать, и клиентские машины будут автоматически обновляться ...

Я полагаю, другое вариант - написать сценарий, который получает и устанавливает .NET 3.5, а затем устанавливает приложение, я не делал этого раньше ... Я уверен, что это сработает ... На самом деле, вы можете развернуть сценарий запуска через Group Политики, которые также получают .NET 3.5, были бы очень простыми.

0
ответ дан 30 November 2019 в 23:05
поделиться

Возможно, NAnt можно было бы использовать для автоматизации изменения URL-адреса развертывания. Я использую его для автоматизации сборки ClickOnce и изменения версии сборки манифеста. ClickOnce with NAnt описывает, как я это сделал.

0
ответ дан 30 November 2019 в 23:05
поделиться

Возможное решение:

Используйте PublishUrl = http: // clickonce / is / kinda / cool и на клиентском компьютере измените файл хостов Windows, расположенный в
% windir% \ system32 \ drivers \ etc \ hosts и укажите хосту clickonce на фиксированный IP-адрес сервера .

Возможно, у ClickOnce должна быть возможность определять сервер, с которого было загружено приложение; Если кто-нибудь знает, напишите здесь;

1
ответ дан 30 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

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