Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[52.14.130.13] |
|
Страницы: (5) « Первая ... 2 3 [4] 5 все ( Перейти к последнему сообщению ) |
Сообщ.
#46
,
|
|
|
Зависит от того, как ты этот кастом экшен определила Если immediate, то да, выполнился. А если deferred, то еще не выполнился Это означает успешное (т.е. без ошибки) завершение работы кастом экшена. 0 - это код ERROR_SUCCESS |
Сообщ.
#47
,
|
|
|
Я все написала, как в примере из статьи. Где происходит во это определение: immediate или deferred?
|
Сообщ.
#48
,
|
|
|
Пределение происходит в элементе CustomAction. По умолчанию immediate.
Значит твое действие выполнилось. Папка могла не создаться из-за того, что фаза immediate работает с пониженными правами запустившего пользователя, а для создания папки в Program Files нужна повышенные права. Обработки ошибок в скрипте нет, поэтому ничего не произошло. Ради теста можешь определить это действие как deferred и перенеси его до InstallFinalize (т.к. deferred custom actions могут располагаться только межно InstallInitialize и InstallFinalize) Однако это только для теста Тебе надо immediate и менять в статус компонент в зависимости от условий |
Сообщ.
#49
,
|
|
|
Я попробовала просто руками как обычно создать папку в Program Files - получилось. Значит дело не в правах?
Вы говорите, что обработки ошибки в скрипте нет, а что же означает вот эта строчка: On Error Resume Next Можно ли писать код в CustomAction не на vbscript, а на C# например? С обычными if-else? |
Сообщ.
#50
,
|
|
|
Цитата Tatyana Druzenko @ Вы говорите, что обработки ошибки в скрипте нет, а что же означает вот эта строчка: Не знаю Я vbscript не понимаю Можно и на C#: Creating WiX Custom Actions in C# and Passing Parameters Я кастом экшены делаю на С++. |
Сообщ.
#51
,
|
|
|
Я что-то запуталась в C# и XML.
Вот я написала: <Binary Id="CusAction.CA.dll" SourceFile="..\OpenSoft.InkRouter.ShedulerService.CustomAction\bin\$(var.Configuration)\OpenSoft.InkRouter.ShedulerService.CustomAction.CA.dll" /> <CustomAction Id="ConfigUpgrade" Property="PRODUCT_V3_INSTALLED" Value="1" Return="check" Execute="immediate" BinaryKey="CusAction.CA.dll" DllEntry="ConfigUpgrade" /> <InstallExecuteSequence> <Custom Action="ConfigUpgrade" Before="InstallFinalize" /> </InstallExecuteSequence> В объявлении CustomAction хочу указать, что когда 3 версия установлена, то свойство PRODUCT_V3_INSTALLED = 1. И потом это использовать. И создала CustomAction. Пытаюсь написать условие, но как указать действие - устанавливать например? public class CustomActions { [CustomAction] public static ActionResult CustomAction1(Session session) { //session.Log("Begin CustomAction1"); if (session["PRODUCT_V3_INSTALLED"].Equals(1)) { .... } else { ... } return ActionResult.Success; } } |
Сообщ.
#52
,
|
|
|
Должно быть
<CustomAction Id="ConfigUpgrade" Return="check" Execute="immediate" BinaryKey="CusAction.CA.dll" DllEntry="ConfigUpgrade" /> Цитата Tatyana Druzenko @ В объявлении CustomAction хочу указать, что когда 3 версия установлена, то свойство PRODUCT_V3_INSTALLED = 1. И потом это использовать. PRODUCT_V3_INSTALLED ты устанавливаешь когда ищешь установленные продукты. Цитата Tatyana Druzenko @ И создала CustomAction. Пытаюсь написать условие, но как указать действие - устанавливать например? MsiSetComponentState function |
Сообщ.
#53
,
|
|
|
Я прошла по ссылке, которую Вы мне дали, нотам нет ни одного примера Никак не разберусь, куда мне писать все эти INSTALLSTATE_* ...
if (INSTALLSTATE_ABSENT) { File.Create("SchedulerService.exe.config"); } else { } Так подчеркивает - нет такого свойства и все так же непонятно, что писать в фигурных скобках. То есть как на C# запустить действие - установку нужного файла, я вот нашла File.Create("SchedulerService.exe.config"), но что-то мне подсказывает, что это не установка данного файла. Добавлено И еще Вы мне посоветовали эту статью, но я не пойму, разве мне это нужно писать? <Property Id="PRODUCTINSTALLFOLDER"> <RegistrySearch Id='ProductInstallDir' Type='raw' Root='HKLM' Key='SOFTWARE\Manufacturer\ExistingProduct\Setup' Name='MsiInstallPath' Win64='yes'/> </Property> <CustomAction Id='AssignConfigFile' Property='CONFIGFILE' Value='[PRODUCTINSTALLFOLDER]pathtoconfigfile\web.config' /> <InstallExecuteSequence> <Custom Action="AssignConfigFile" After="CostFinalize" /> <Custom Action="ConfigurEwsFilter" Before="InstallFinalize" /> </InstallExecuteSequence> .... session.Log("Session value for CONFIGFILE = '{0}'", session["CONFIGFILE"]); |
Сообщ.
#54
,
|
|
|
Tatyana Druzenko, ты когда-нибудь программировала?
|
Сообщ.
#55
,
|
|
|
Конечно, а что не так?
|
Сообщ.
#56
,
|
|
|
Ну просто показалось, что нет
File.Create("SchedulerService.exe.config"); - просто создает файл, тебе это не надо. Тебе надо вызвать функцию MsiSetComponentState и установить iState в INSTALLSTATE_LOCAL. вот кастом экшен, который, по идее , всегда устанавливает компоненту "SchedulerService.exe.config". extern "C" __declspec(dllexport) UINT SetComponentState (MSIHANDLE hInstaller) { return MsiSetComponentState (hInstall, _T("SchedulerService.exe.config"), INSTALLSTATE_LOCAL); } тебе надо получить значения интересующих тебя пропертей и в зависимости от них требовать установки компоненты (ну или нет ). Для начала попробуй, работает ли это в принципе, потом уже можно будет финтить с условиями. |
Сообщ.
#57
,
|
|
|
К сожалению у меня подчеркивается и MSIHANDLE, и MsiSetComponentState (hInstall, и INSTALLSTATE_LOCAL.
А в интернете я не могу найти, какой using надо написать. Можете подсказать? |
Сообщ.
#58
,
|
|
|
Это на С++.
В принципе есть Microsoft.Deployment.WindowsInstaller, но это не "родная" библиотека, а какие-либо зависимости крайне нежелательны. |
Сообщ.
#59
,
|
|
|
Эта библиотека подключена у меня, но компилятор все равно говорит, что не находит эти имена. Получается мне нужно удалять этот CustomAction и делать новый на C++? Аналога на c# нет?
|
Сообщ.
#60
,
|
|
|
Не уверен, но предположу, что в этой библиотеке эта функция называется InstallMissingComponent.
|