Действительно ли возможно развернуть собственное приложение Delphi с ClickOnce

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

9
задан Branko 11 September 2008 в 05:35
поделиться

3 ответа

Лично я создаю собственный механизм для запуска процесса самообновления, когда временная метка моего приложения не синхронизирована с сервером. Не слишком сложно, но это не простая задача.

Кстати, для Delphi вы можете использовать стороннюю помощь:

http://www.tmssoftware.com/site/wupdate.asp

ОБНОВЛЕНО:

Для моей реализации:

MyApp.EXE будет работать в 3 разных режимах

  1. MyApp.EXE без аргументов. Обычно при этом запускается приложение.

    1.1 Самое первое, что он делает, это проверяет собственное время файла на сервере.

    1.2 Если требуется обновление, он загружает обновленный файл в файл с именем «MyApp». -ГГГГ-ММ-ДД-ЧЧ-ММ-SS.exe "

    1.3 Затем он вызывает" MyApp-YYYY-MM-DD-HH-MM-SS.exe "с аргументом команды

     MyApp-YYYY-MM -DD-HH-MM-SS.exe - обновить MyApp.EXE
    

    1.4 Закройте это приложение.

    1.5 Если обновление не требуется, приложение будет нормально запускаться с 1.1

  2. MyApp.EXE --update "FILENAME".

    2.1 Попытайтесь скопировать себя в "FILENAME" каждые 100 мс до успеха.

    2.2 Вызов "FILENAME" в случае успеха

    2.3 Вызов "FILNAME --delete MyApp-YYYY-MM-DD-HH-MM-SS.exe" для удаления самого себя.

    2.4 Завершить

  3. MyApp.EXE --delete "FILENAME"

    3.1 Попробуйте удалять файл "FILENAME" каждые 500 мс, пока не добьетесь успеха.

    3.2 Завершить

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

Удачи

8
ответ дан 4 December 2019 в 19:37
поделиться

Я не на 100% уверен, может ли это быть выполнено без тупика, но эта статья может предоставить некоторое понимание:

Как К: развертывание ClickOnce для неуправляемого приложения с COM-компонентом в управляемой сборке

1
ответ дан 4 December 2019 в 19:37
поделиться

Нет, точка входа к Вашему приложению должна быть управляемым кодом.

Это от сообщения в блоге Brian Noyes, одними из основных полномочий на ClickOnce и авторе Умного Клиентского Развертывания с ClickOnce.

Если Вы, приложение является ДЕЙСТВИТЕЛЬНО наследием (т.е. VB6, MFC, ATL, и т.д.), как в неуправляемом исполняемом файле кода, то не, Вы не можете развернуть его как исполняемый файл через ClickOnce.

Принятое обходное решение, кажется, тупик управляемого кода exe, который запускает основной exe.

3
ответ дан 4 December 2019 в 19:37
поделиться
Другие вопросы по тегам:

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