The execute attribute on Custom action lets you choose immediate, deferred, 
etc. An issue I'm seeing in the installer is that accessing a Session attribute 
is only allowed if it's immediate execution. So this makes me think it has to 
be immediate, but must be after a step that's after InstallFiles, since the 
files aren't actually installed. Is there a set list of the action steps?

Exception thrown by custom action:
System.Reflection.TargetInvocationException: Exception has been thrown by the 
target of an invocation. ---> 
Microsoft.Deployment.WindowsInstaller.InstallerException: Cannot access session 
details from a non-immediate custom action
   at Microsoft.Deployment.WindowsInstaller.Session.ValidateSessionAccess()
   at Microsoft.Deployment.WindowsInstaller.Session.get_Item(String property)
   at CustomInstallActions.CustomActions.SetEfxZlibLibrary(Session session)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, 
Object target, Object arguments, SignatureStruct& sig, MethodAttributes 
methodAttributes, RuntimeType typeOwner)
   at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, 
Object target, Object arguments, Signature sig, MethodAttributes 
methodAttributes, RuntimeType typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags 
invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean 
skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags 
invokeAttr, Binder binder, Object parameters, CultureInfo culture)
   at 
Microsoft.Deployment.WindowsInstaller.CustomActionProxy.InvokeCustomAction(Int32
 sessionHandle, String entryPoint, IntPtr remotingDelegatePtr)

When I changed the Action to execute After="InstallFinalize", I was able to 
access the session details and the files were in the install directory. 
However, my action is failing to do what it's trying to do because of 
permissions. The action is attempting to make a copy of a file with a new name 
based on if the system is 32/64. I'm guessing the step I'm in in the installer 
isn't a step where it has permissions. I'm not sure where I should be doing 
these actions, I was able to get these to function in a Visual Studio 
deployment project custom action without much grief.


Mark Freedman


-----Original Message-----
From: Phil Wilson [mailto:phil.wil...@mvps.org] 
Sent: Monday, May 20, 2013 1:18 PM
To: 'General discussion for Windows Installer XML toolset.'
Subject: Re: [WiX-users] Getting install path from Wix Custom Action

The execute sequence runs twice, in custom action terminology the first is 
"immediate", when Windows is writing a script to do the install; the second 
time it's "deferred" when applied to custom actions, when the system actually 
gets changed. That means you can be after InstallFiles in an immediate custom 
action and the files haven't been copied yet. You need immediate="no", I think 
that's the syntax. 

Custom actions have conditions. A typical condition to cause a CA to run only 
at install time is (case sensitive) Not Installed 

Phil 

-----Original Message-----
From: Freedman, Mark P. [mailto:mark.freed...@jhuapl.edu]
Sent: Monday, May 20, 2013 9:55 AM
To: General discussion for Windows Installer XML toolset.
Subject: Re: [WiX-users] Getting install path from Wix Custom Action

Turns out the attribute I was trying to use was INSTALLFOLDER, not INSTALLDIR, 
as specified in my Product.wxs. So now, that resolves to the path I expect.

However, I'm having a new issue. The custom action is trying to work on a file 
that's expeted to be present in my INSTALLFOLDER. I put some MessageBoxes in 
the CA for debugging purposes. When the CA is firing, the files havne't been 
copied over to the install directory yet. I'd think that my files would be 
there at the time since the action isn't firing until after InstallFiles. What 
other options do I have?

Also, my custom action appears to be firing when I uninstall the program.
Again, this is confusing to me given that the action isn't firing until after 
InstallFiles.

Thanks.

Mark Freedman


-----Original Message-----
From: John Cooper [mailto:jocoo...@jackhenry.com]
Sent: Monday, May 20, 2013 12:49 PM
To: General discussion for Windows Installer XML toolset.
Subject: Re: [WiX-users] Getting install path from Wix Custom Action

First off, scheduling.  The values of Directory properties (including one like 
INSTALLDIR), aren't going to be meaningful until after CostFinalize.
Since you're running in the InstallExecSequence after InstallFiles, that's not 
it.

However, you should be able to resolve INSTALLDIR like any other public 
property.  If session["INSTALLDIR"] resolves to nothing, I'm thinking you 
haven't saved/restored this property.  Is this running in a "Repair" or 
"Upgrade"?

--
John Merryweather Cooper
Build & Install Engineer - ESA
Jack Henry & Associates, Inc.®
Shawnee Mission, KS  66227
Office:  913-341-3434 x791011
jocoo...@jackhenry.com
www.jackhenry.com 




-----Original Message-----
From: Freedman, Mark P. [mailto:mark.freed...@jhuapl.edu]
Sent: Monday, May 20, 2013 11:30 AM
To: wix-users@lists.sourceforge.net
Subject: [WiX-users] Getting install path from Wix Custom Action

I have a custom action and am trying to access the Install Directory, or Target 
path (the base folder that the user chooses to install to).

Within my Action, I tried pulling it from Session. TARGETDIR maps to "C:\", 
despite installing it to program files, and INSTALLDIR yields empty stirng.
What am I missing? I also tried passing the INSTALLDIR in the CustomAction tag 
with the Directory attribute, but it comes back saying that it can't be 
something in brackets.


[CustomAction]
public static ActionResult SetEfxZlibLibrary(Session session) {
                session.Log("Begin CA");

                string installDirectory = session["INSTALLDIR"];

                // ....
}


<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi";>
  <?include Includes.wxi ?>
                <Fragment>
    <CustomAction Id='SetEfxZlibLibraryAction'
BinaryKey='CustomActionBinary' DllEntry='SetEfxZlibLibrary'
Execute='immediate'
                  Return='check'/>

    <Binary Id="CustomActionBinary"
SourceFile="$(var.CustomInstallActionsFile)"/>
                </Fragment>
</Wix>



Thanks,

Mark Freedman

----------------------------------------------------------------------------
--
AlienVault Unified Security Management (USM) platform delivers complete 
security visibility with the essential security capabilities. Easily and 
efficiently configure, manage, and operate all of your security controls from a 
single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users
NOTICE: This electronic mail message and any files transmitted with it are 
intended exclusively for the individual or entity to which it is addressed.
The message, together with any attachment, may contain confidential and/or 
privileged information.
Any unauthorized review, use, printing, saving, copying, disclosure or 
distribution is strictly prohibited. If you have received this message in 
error, please immediately advise the sender by reply email and delete all 
copies.


----------------------------------------------------------------------------
--
AlienVault Unified Security Management (USM) platform delivers complete 
security visibility with the essential security capabilities. Easily and 
efficiently configure, manage, and operate all of your security controls from a 
single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

----------------------------------------------------------------------------
--
AlienVault Unified Security Management (USM) platform delivers complete 
security visibility with the essential security capabilities. Easily and 
efficiently configure, manage, and operate all of your security controls from a 
single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users



------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete 
security visibility with the essential security capabilities. Easily and 
efficiently configure, manage, and operate all of your security controls from a 
single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to