2016-10-17 5 views
0

Я пытаюсь перечитать значение из файла XML в мой проект Installshield Basic MSI при обновлении, потому что он всегда настаивает на перезаписывании моих XML-файлов, измененных с помощью изменений файла xml со значениями по умолчанию , Когда я перехожу на экран «Поиск системы», я добавляю новое значение файла XML через Мастер поиска системы. Затем я ввожу имя файла exe.config (содержимое ниже), я указываю полный путь к тому месту, где установлен файл, я вводил «/ configuration/appSettings/add [@ key =« UiServiceIpAddress »]» для XPath. Я искал значение атрибута «значение» и сказал ему сохранить значение в действительном свойстве.InstallShield Basic MSI System Search не запускается для xml-файла

Когда я запускаю этот msi, он ничего не делает. Посмотрев мой журнал MSI (вывод ниже), я вижу запуск AppSearch, но он даже не упоминает мой xml appsearch. После немного разобраться, я понял, как запустить проверку на моем MSI. С ним связана ошибка, которая гласит: «Недопустимое имя файла; Таблица: подпись, имя столбца, ключ (ы): NewSignature1». Имя файла для меня верен. Поэтому я в тупике.

выход журнала Msi:

Action start 13:21:48: AppSearch. 
AppSearch: Property: IEXPLORE, Signature: IEXPLORE_REG.C8C0673E_50E5_4AC4_817B_C0E4C4466990 
MSI (c) (80:B0) [13:21:48:597]: Note: 1: 2262 2: Signature 3: -2147287038 
MSI (c) (80:B0) [13:21:48:597]: WIN64DUALFOLDERS: 'C:\Program Files (x86)\' will substitute 17 characters in 'C:\Program Files\Internet Explorer\IEXPLORE.EXE' folder path. (mask argument = 0, the folder pair's iSwapAttrib member = 0). 
MSI (c) (80:B0) [13:21:48:597]: PROPERTY CHANGE: Adding IEXPLORE property. Its value is 'C:\Program Files (x86)\Internet Explorer\IEXPLORE.EXE'. 
AppSearch: Property: DOTNETVERSION40FULL, Signature: DotNet40Full 
MSI (c) (80:B0) [13:21:48:597]: Note: 1: 2262 2: Signature 3: -2147287038 
MSI (c) (80:B0) [13:21:48:597]: PROPERTY CHANGE: Adding DOTNETVERSION40FULL property. Its value is '#1'. 
Action ended 13:21:48: AppSearch. Return value 1. 

XML файл:

<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
     <add value="127.0.0.1" key="UiServiceIpAddress"></add> 
    </appSettings> 
</configuration> 

ответ

0

Там нет ничего в AppSearch средства Windows Installer, которая будет извлекать значение из файла XML. Есть несколько объяснений:

  1. InstallShield добавил функциональность вне установщика Windows, так что может быть внутренним настраиваемое действие, что они добавляют, чтобы сделать это, и что бы показать где-нибудь еще в вашем журнале.

  2. Документация каким-то образом запуталась с функциональностью IniLocator, которая будет извлекать значение из стандартного INI-файла (а не файла Xml).

Как еще один ответ указывает, 1. причина. Найдите свой журнал для ISXmlAppSearch.

1

Я подозреваю, что вы используете AppSearch для поиска значений XML и присваиваете их свойству, используя нотацию XPATH, указанную выше.

Подтверждение ICE для вашего MSI показывает неверно отформатированное имя файла для вашего файла appsettings.xml. Я думаю, все, что вам нужно сделать, это предоставить формат shortname (8.3) для вашего имени файла.

Пример: FileName = appSettings.xml

FileName columnValue = AppSet ~ 1.xml | appsettings.xml

Фил правильно в том, что сама MSI не поддерживает поиск XML файлов и что InstallShield добавил настраиваемое действие, которое управляет этим для нас.

Проведите поиск 'ISXmlAppSearch', и это покажет вам результаты.

Вот результат из файла журнала из одного из моих инсталляторов, где он не находит файл xml.

Action start 14:09:17: ISXmlAppSearch. 
InstallShield 14:09:18: Searching for the contents of the XML Element using the Element '//brand'. 
InstallShield 14:09:18: The location of the XML file, stored in the Property 'SYSTEMSETTINGS1', is currently a NULL value. It appears that the AppSearch did not find the file. 
InstallShield 14:09:18: Searching for the contents of the XML Element using the Element '//maincomputer'. 
InstallShield 14:09:18: The location of the XML file, stored in the Property 'SYSTEMSETTINGS', is currently a NULL value. It appears that the AppSearch did not find the file. 
MSI (s) (F0:1C) [14:09:18:199]: Doing action: LaunchConditions 
Action ended 14:09:18: ISXmlAppSearch. Return value 1. 

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

Action start 9:28:24: ISXmlAppSearch. 
MSI (s) (D0!0C) [09:28:24:539]: PROPERTY CHANGE: Adding ISMEDFX property. Its value is 'ac'. 
InstallShield 9:28:24: Searching for the contents of the XML Element using the Element '//brand'. 
InstallShield 9:28:24: Success! The ISXmlAppSearch action set the value of the associated property to the following value: 'ac'. 
MSI (s) (D0!0C) [09:28:24:539]: PROPERTY CHANGE: Modifying MAINCOMPUTER property. Its current value is 'YES'. Its new value: 'yes'. 
InstallShield 9:28:24: Searching for the contents of the XML Element using the Element '//maincomputer'. 
InstallShield 9:28:24: Success! The ISXmlAppSearch action set the value of the associated property to the following value: 'yes'. 
MSI (s) (D0!0C) [09:28:24:539]: PROPERTY CHANGE: Adding STORAGELOCATIONROOT property. Its value is 'p:\program files (x86)\amazing charts\'. 
InstallShield 9:28:24: Searching for the contents of the XML Element using the Element '//storagelocationroot'. 
InstallShield 9:28:24: Success! The ISXmlAppSearch action set the value of the associated property to the following value: 'p:\program files (x86)\amazing charts\'. 
MSI (s) (D0:D8) [09:28:24:555]: Skipping action: MedFxSet (condition is false) 
MSI (s) (D0:D8) [09:28:24:555]: Doing action: LaunchConditions 
Action ended 9:28:24: ISXmlAppSearch. Return value 1. 
  • Чтобы установить это с помощью мастера InstallShield, я создал новый XML тип системный поиск.

    • Я указал имя файла в моем случае SYSTEM ~ 1.XML | systemsettings.xml. ПРИМЕЧАНИЕ. Мастер указывает неверную ошибку имени файла, если здесь указывается короткое имя, вы должны использовать прямое редактирование, чтобы убедиться, что у вас есть допустимое имя файла.

    • Я установил значение «Look In» в «Путь, найденный в предыдущем поиске:», но вы можете указать все, что хотите, до тех пор, пока это реальный путь. Я думаю, что это сделано до инициализации стоимости, поэтому ваше свойство INSTALLDIR может не присутствовать, поэтому я делаю AppSearch для каталога установки и использую опцию для предыдущего поиска.

    • Я определил свой XPath XML-элемент. Я помню разочарование в этом и, в конце концов, все, что мне нужно было указать, это мой конкретный элемент, особенно если он уникален в XML-файле. например // бренд, а не parentelement/brand

    • Я выбрал вариант «Искать» для «Содержание элемента», а затем сохранил значение в свойстве, которое я могу использовать позже.

Чтобы вручную изменить имя файла с открытой Direct Editor. Перейдите к таблице подписи Найдите свою запись и измените значение FileName.