我有執行特定任務的InstallScript代碼。該任務可以工作或不工作。如果任務有效,我想將全局變量設置爲1.如果它不起作用,我想將全局變量設置爲0.在InstallShield中獲取/設置全局變量
某處,我有另一個執行的InstallScript代碼。我想要的是檢查全局變量以查看它是否爲1.如果是,請關閉該代碼。
我知道我可以修改Install Exec Condition,但是我不知道該怎麼做的是檢查一個全局變量。我怎麼能做到這一點?
我有執行特定任務的InstallScript代碼。該任務可以工作或不工作。如果任務有效,我想將全局變量設置爲1.如果它不起作用,我想將全局變量設置爲0.在InstallShield中獲取/設置全局變量
某處,我有另一個執行的InstallScript代碼。我想要的是檢查全局變量以查看它是否爲1.如果是,請關閉該代碼。
我知道我可以修改Install Exec Condition,但是我不知道該怎麼做的是檢查一個全局變量。我怎麼能做到這一點?
在InstallScript項目中,只需創建並設置一個全局變量,並根據需要對其進行編碼。
如果您在MSI的上下文中詢問運行InstallScript的自定義操作,則必須使用MSI Properties作爲全局變量。調用MsiSetProperty進行設置,並將自定義操作的條件寫入該屬性。或者調用MsiGetProperty在代碼中檢索它並在那裏執行條件執行。請注意,如果第一個操作在UI序列中,第二個操作在執行序列中,則應該將您使用的任何屬性添加到SecureCustomProperties
屬性中。
爲了使這更具體,你的代碼可能是這樣的:
// Note: hInstall is the first parameter to your custom action
MsiSetProperty(hInstall, "RUN_SECOND_ACTION", "1");
,並在自定義操作的條件可能是簡單的:
RUN_SECOND_ACTION
你可以只聲明該函數外的變量在.rul文件中,變量將是一個全局變量。
如果要在其他.rul文件中使用全局變量,則必須包含聲明全局變量的rul文件。
ex。
/* 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_
然而,正如Urman說,使用屬性是一種更好的方式。
我錯過了SecureCustomProperties的步驟,所以我無法通過MsiGetProperty()獲取值,而是使用全局變量。
但是現在我已經獲得了這些信息,並且我還將重寫我的代碼以使用property。
謝謝。事實確實如此。我唯一需要做的就是在「自定義操作和序列」中,添加一個新的集合屬性,我很高興去。 – coson