Is there alternative way to access session details in deferred custom action?

会有一股神秘感。 提交于 2019-11-30 11:21:35

问题


I have a custom action and need to get below values for copying some parts from installation folder to VS2010 folder

  1. VS2010 directory path (VS2010DEVENV property)
  2. Installation path (INSTALLLOCATION property)

To give enough privileges, I've set custom action as Execute='deferred' Impersonate='no'. But when running the installer, it logged the message:

Cannot access session details from a non-immediate custom action

It seems we cannot access a property in a "deferred" custom action (i.e session["VS2010DEVENV"])

Is there any other way so that I can retrieve those values as needed?


回答1:


This must be helpful. Pay special attention to the bottom of the page, a guideline of 2 steps how to pass values via CustomActionData.

Here is the excerpt:

To write the value of a property into the installation script for use during a deferred execution custom action:

  1. Insert a small custom action into the installation sequence that sets the property of interest to a property having the same name as the deferred execution custom action. For example, if the primary key for the deferred execution custom action is "MyAction" set a property named "MyAction" to the property X which you need to retrieve. You must set the "MyAction" property in the installation sequence before the "MyAction" custom action. Although any type of custom action can set the context data, the simplest method is to use a property assignment custom action (for example Custom Action Type 51).
  2. At the time when the installation sequence is processed, the installer will write the value of property X into the execution script as the value of the property CustomActionData.



回答2:


Additional details: multiple property values can be passed by using the following syntax in a "Custom Action Type 51" (which is basically just a custom action that sets a property value):

PROPERTY1=Value1;PROPERTY2=Value2;PROPERTY3=...

Values can be retrieved from within the custom action like this:

string prop1 = session.CustomActionData["PROPERTY1"];
string prop2 = session.CustomActionData["PROPERTY2"];

Here's an example that sets property values for a custom action with ID "MyCustomAction":

<CustomAction
  Id="SetCustomActionPropertyValues"
  Property="MyCustomAction"
  Value="INSTALLDIR=[INSTALLDIR];EXECUTABLE=[#MyExecutableFile]" />

(read this MSDN article for more details on the formatted syntax which in this example is used to retrieve the install location of a file with ID "MyExecutableFile")



来源:https://stackoverflow.com/questions/7306367/is-there-alternative-way-to-access-session-details-in-deferred-custom-action

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!