Получение / установка глобальной переменной в InstallShield - PullRequest
2 голосов
/ 29 сентября 2011

У меня есть код InstallScript, который выполняет определенную задачу.Задача будет работать или не будет работать.Если задача работает, я хочу установить глобальную переменную на 1. Если она не работает, я хочу установить глобальную переменную на 0.

Где-то внизу у меня есть другой код InstallScript, который выполняется.Я хочу проверить глобальную переменную, чтобы узнать, равна ли она 1. Если это так, запустите этот код.

Я знаю, что могу изменить условие Install Exec, но я не знаю, как это сделать.проверить глобальную переменную.Как мне это сделать?

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

В проекте InstallScript, просто создайте и установите глобальную переменную и кодируйте ее по своему усмотрению.

Если вместо этого вы запрашиваете в контексте MSI с пользовательскими действиями, которые запускают InstallScript, у вас естьиспользовать MSI Properties в качестве глобальных переменных.Вызовите MsiSetProperty, чтобы установить его, и запишите условие вашего пользовательского действия для этого свойства.Или вызовите MsiGetProperty, чтобы получить его в своем коде и выполнить там условное выполнение.Обратите внимание, что если первое действие выполняется в последовательности пользовательского интерфейса, а второе - в последовательности «Выполнение», вам следует добавить любые свойства, которые вы используете, к свойству SecureCustomProperties.

Чтобы сделать это более конкретным, ваш код может выглядетьнапример:

// Note: hInstall is the first parameter to your custom action
MsiSetProperty(hInstall, "RUN_SECOND_ACTION", "1"); 

и ваше условие в настраиваемом действии может быть просто:

RUN_SECOND_ACTION
0 голосов
/ 13 февраля 2014

Вы можете просто объявить переменную вне функции в файле .rul, и эта переменная будет глобальной переменной.

Если вы хотите использовать глобальную переменную в другом файле .rul, вам нужно включить файл rul, который объявляет глобальную переменную.

отл.

/* featureevents.rul */
STRING globalVar; // declare a global variable
export prototype xxx_installed();
function xxx_installed()
  STRING localVar; // declare a local variable
begin
end;

-

/* Setup.rul */
#include "featureevents.rul"
function OnFirstUIBefore()
begin
// use a global variable
  globalVar="This is a global variable.";
  MessageBox(globalVar, INFORMATION);
end;

Я предлагаю вам добавить один или несколько файлов заголовков ресурсов и поместить в них все константы, глобальные переменные и объявления функций.

/* featureevents.rul */
#include "CusRes.h"
...

-

/* Setup.rul */
#include "CusRes.h"
...

-

/* CusRes.h */
#ifndef _CUSRES_H_
#define _CUSRES_H_

// move the code to resource header file
STRING globalVar;
export prototype xxx_installed();

#endif //_CUSRES_H_

Однако, как сказал Урман, лучше использовать свойство.

Мне не хватает шага SecureCustomProperties, поэтому я не могу получить значение с помощью MsiGetProperty () и использовать вместо него глобальную переменную.

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

...