Are you really cranking up all this infrastructure just to see if a directory 
exists? There's got to be a simpler way, even if it's only a horrible little 
VBScript 10 line custom action. At least that is natively supported by Windows 
Installer.

Phil Wilson

-----Original Message-----
From: McKinnon, Chris [mailto:cmckin...@atb.com]
Sent: Tuesday, October 19, 2010 8:58 AM
To: General discussion for Windows Installer XML toolset.
Subject: Re: [WiX-users] Calling a managed custom action from a UI control

Hi Blair,

No log entries, unfortunately.  I've let my installer sit spinning for
about 20-30 minutes.  I could let it sit longer but I don't think that
would help.  I'm going to try my installer on a Windows 2000
Professional workstation when I have a chance today.  Let me know if
there's anything else I can do to track down this issue.

Thanks,

Chris McKinnon

-----Original Message-----
From: Blair [mailto:os...@live.com]
Sent: Tuesday, October 19, 2010 12:06 AM
To: 'General discussion for Windows Installer XML toolset.'
Subject: Re: [WiX-users] Calling a managed custom action from a UI
control

Whenever Windows Installer launches a DLL-type custom action, it does so
from a separate msiexec.exe process instance (sandboxing the custom
action
code, if you will). However, because this "sandbox" process may be
reused,
and because loading pre-4.x CLR runtimes "marks" the process preventing
a
different runtime from ever being loaded, DTF runs the assemblies in
their
own child process.

When you build a DTF custom action assembly, a native stub is
built/modified
that contains an entry point for each method with a
CustomActionAttribute,
along with being "packed" with your assembly, config, and dependencies.
This
stub sends a copy of itself to RunDll.exe after creating a two-way
communications pipe to communicate with its child process (which allows
for
querying the session for properties, running queries, etc.).

The stub in the (grandchild) process establishes communication with its
parent (the stub in the sandbox), extracts its payload, loads the
indicated
CLR, loads your assembly into an AppDomain, and finally calls your code
(this is where the transition into managed code finally occurs). You
seem to
be hanging somewhere in this paragraph (at least until you kill the
rundll.exe process). Are there any System or Application event log
entries
that may explain/describe some failure with the CLR spinup?
Unfortunately
calling MsiProcessMessage is documented to not work from a DoAction so
any
error or progress logging performed by the stub won't show up.

-----Original Message-----
From: McKinnon, Chris [mailto:cmckin...@atb.com]
Sent: Monday, October 18, 2010 10:52 AM
To: wix-users@lists.sourceforge.net
Subject: Re: [WiX-users] Calling a managed custom action from a UI
control

Thanks for the ideas Steve.

I tried running my code in a separate thread, like yours, but it still
hangs.  I'm running on Windows Vista Business 32-bit.  I noticed, by
accident, that in Process Explorer when the custom action starts up that
a new process tree is spawned:

1. msiexec.exe
        2. msiexec.exe
                3. rundll.exe (DTF Self-Extracting Custom Action)

The custom action is run when I click the next button on the
ServiceOptionsDlg in my installer.  The 1st time I click the button it
hangs.  If I kill the process tree above and click the next button
again, it runs my custom action.  Every time after that, if I click
"next", my custom action works fine.  I'm baffled why.  Here's the log
from me, killing the process tree the 1st time (the one at
11:11:06:126), then running my custom action (Directory.Exists()) on a
path of "t" and then on a path of "C:\":

Action 11:08:53: ServiceOptionsDlg. Dialog created
MSI (c) (CC:24) [11:08:58:414]: PROPERTY CHANGE: Adding ARCHIVE_PATH
property. Its value is 't'.
MSI (c) (CC:24) [11:08:58:543]: PROPERTY CHANGE: Adding
_DirectoryExists_Path property. Its value is 't'.
MSI (c) (CC:24) [11:08:58:543]: Doing action: CheckArchiveDirectory
Action 11:08:58: CheckArchiveDirectory.
Action start 11:08:58: CheckArchiveDirectory.
MSI (c) (CC:80) [11:08:58:573]: Invoking remote custom action. DLL:
C:\Users\e25735\AppData\Local\Temp\MSIF23D.tmp, Entrypoint:
DirectoryExists
MSI (c) (CC:A8) [11:08:58:574]: Cloaking enabled.
MSI (c) (CC:A8) [11:08:58:574]: Attempting to enable all disabled
privileges before calling Install on Server
MSI (c) (CC:A8) [11:08:58:575]: Connected to service for CA interface.
Action ended 11:11:02: CheckArchiveDirectory. Return value 1.
MSI (c) (CC:24) [11:11:06:126]: Doing action: CheckArchiveDirectory
Action 11:11:06: CheckArchiveDirectory.
Action start 11:11:06: CheckArchiveDirectory.
MSI (c) (CC:A0) [11:11:06:184]: Invoking remote custom action. DLL:
C:\Users\e25735\AppData\Local\Temp\MSIE4A7.tmp, Entrypoint:
DirectoryExists
MSI (c) (CC:A0) [11:11:06:184]: Lost connection to custom action server
process. Attempting to regenerate.
MSI (c) (CC:A8) [11:11:06:259]: Cloaking enabled.
MSI (c) (CC:A8) [11:11:06:259]: Attempting to enable all disabled
privileges before calling Install on Server
MSI (c) (CC:A8) [11:11:06:259]: Connected to service for CA interface.
MSI (c) (CC!8C) [11:11:31:366]: PROPERTY CHANGE: Adding
_DirectoryExists_Result property. Its value is 'no'.
Action ended 11:11:47: CheckArchiveDirectory. Return value 1.
MSI (c) (CC:24) [11:11:47:571]: PROPERTY CHANGE: Adding VErr_Text
property. Its value is 'The archive path specified does not exist.'.
Action 11:11:47: ValidationErrDlg. Dialog created
MSI (c) (CC:24) [11:11:57:555]: PROPERTY CHANGE: Modifying ARCHIVE_PATH
property. Its current value is 't'. Its new value: 'c:\'.
MSI (c) (CC:24) [11:11:57:731]: PROPERTY CHANGE: Modifying
_DirectoryExists_Path property. Its current value is 't'. Its new value:
'c:\'.
MSI (c) (CC:24) [11:11:57:731]: Doing action: CheckArchiveDirectory
Action 11:11:57: CheckArchiveDirectory.
Action start 11:11:57: CheckArchiveDirectory.
MSI (c) (CC:14) [11:11:57:745]: Invoking remote custom action. DLL:
C:\Users\e25735\AppData\Local\Temp\MSIAE3D.tmp, Entrypoint:
DirectoryExists
MSI (c) (CC!E8) [11:12:05:774]: PROPERTY CHANGE: Modifying
_DirectoryExists_Result property. Its current value is 'no'. Its new
value: 'yes'.
Action ended 11:12:06: CheckArchiveDirectory. Return value 1.
Action 11:12:06: VerifyReadyDlg. Dialog created

It appears that the 1st time my custom action runs, it's hanging before
it even gets to my code.  I've tried putting MessageBox and
System.Diagnosics.Debugger.Launch() as the 1st line of code in my custom
action.  They never get called.  I also tried this on our SIT Windows
2003 server.  The custom action runs without hanging.  Here is the log:

Action 11:44:17: ServiceOptionsDlg. Dialog created
MSI (c) (68:74) [11:44:20:682]: PROPERTY CHANGE: Adding ARCHIVE_PATH
property. Its value is 't'.
MSI (c) (68:74) [11:44:20:854]: PROPERTY CHANGE: Adding
_DirectoryExists_Path property. Its value is 't'.
MSI (c) (68:74) [11:44:20:854]: Doing action: CheckArchiveDirectory
Action 11:44:20: CheckArchiveDirectory.
Action start 11:44:20: CheckArchiveDirectory.
MSI (c) (68:1C) [11:44:21:651]: Invoking remote custom action. DLL:
C:\DOCUME~1\e25735\LOCALS~1\Temp\1\MSI2.tmp, Entrypoint: DirectoryExists
MSI (c) (68:AC) [11:44:21:667]: Cloaking enabled.
MSI (c) (68:AC) [11:44:21:667]: Attempting to enable all disabled
priveleges before calling Install on Server
MSI (c) (68:AC) [11:44:21:667]: Connected to service for CA interface.
MSI (c) (68!68) [11:44:22:745]: PROPERTY CHANGE: Adding
_DirectoryExists_Result property. Its value is 'no'.
Action ended 11:44:22: CheckArchiveDirectory. Return value 1.
MSI (c) (68:74) [11:44:22:901]: PROPERTY CHANGE: Adding VErr_Text
property. Its value is 'The archive path specified does not exist.'.
Action 11:44:22: ValidationErrDlg. Dialog created
MSI (c) (68:74) [11:44:29:480]: PROPERTY CHANGE: Modifying ARCHIVE_PATH
property. Its current value is 't'. Its new value: 'c:\'.
MSI (c) (68:74) [11:44:29:637]: PROPERTY CHANGE: Modifying
_DirectoryExists_Path property. Its current value is 't'. Its new value:
'c:\'.
MSI (c) (68:74) [11:44:29:637]: Doing action: CheckArchiveDirectory
Action 11:44:29: CheckArchiveDirectory.
Action start 11:44:29: CheckArchiveDirectory.
MSI (c) (68:00) [11:44:29:668]: Invoking remote custom action. DLL:
C:\DOCUME~1\e25735\LOCALS~1\Temp\1\MSI3.tmp, Entrypoint: DirectoryExists
MSI (c) (68!00) [11:44:30:387]: PROPERTY CHANGE: Modifying
_DirectoryExists_Result property. Its current value is 'no'. Its new
value: 'yes'.
Action ended 11:44:30: CheckArchiveDirectory. Return value 1.
Action 11:44:30: VerifyReadyDlg. Dialog created

Anyone have any ideas what would be causing the hang?  It was thinking
it might be permissions or a group policy setting but then running the
custom action should fail every time.

Thank,

Chris McKinnon


-----Original Message-----
From: Steve Green [mailto:sgr...@gtl.biz]
Sent: Monday, October 18, 2010 2:38 AM
To: wix-users@lists.sourceforge.net
Subject: Re: [WiX-users] Calling a managed custom action from a UI
control


Chris,

I had a similar problem opening the windows OpenFileDialog common
dialog. I
found it would work fine on Windows Server 2003 but on Windows 7 it just
hung, showing the same spinning wheel.

I ended up having to open the dialog in a new thread, then all worked
fine.

My C# code was as follows:


   public class ShowOpenFileDlg
   {
      private OpenFileDialog _dlg;
      private Session _session;

      public ShowOpenFileDlg(Session session)
      {
         _session = session;
         _dlg = new OpenFileDialog();
      }

      public void Show()
      {
         if (_dlg.ShowDialog() == DialogResult.OK)
         {
            _session["BROWSEFILE"] = _dlg.FileName;
         }
      }
   }

      [CustomAction]
      public static ActionResult ShowFileOpenDlg(Session session)
      {
         ShowOpenFileDlg dlg = new ShowOpenFileDlg(session);
         Thread thread = new Thread(dlg.Show);
         thread.SetApartmentState(ApartmentState.STA);
         thread.Start();
         thread.Join();

         return ActionResult.Success;
      }

As for debugging, I had the same problem with the log file so ended up
just
adding MessageBox.Show(...) lines through my code.

Hope this helps.

Steve

McKinnon Chris wrote:
>
> Hi,
>
> I have built a managed custom action to check if a UNC path exists.
I'm
> not installing to this path.  This path is simply being set as the
value
> of a .config file setting during the install.  I just want to verify
> that it is a valid path.  The custom action is defined as follows:
>
> [CustomAction]
> public static ActionResult DirectoryExists(Session session)
> {
> CustomActionService service = new CustomActionService();
> return service.DirectoryExists(session);
> }
>
> I created the custom action project using the Visual Studio template
for
> a C# custom action.  This custom action expects a
> "_DirectoryExists_Path" property to contain the path to check.  And it
> populates a "_DirectoryExists_Result" with a "yes" (true) or "no"
> (false) result.  The custom action is just calling
> System.IO.Directory.Exists() to do the check.  I have the custom
action
> defined in the installer like so:
>
> <CustomAction Id="CheckArchiveDirectory"
> BinaryKey="AppDevInstallCustomActions.dll" DllEntry="DirectoryExists"
> Execute="immediate" Return="ignore" Impersonate="yes" />
>
> And to be called in the UI, like so:
>
> <Publish Dialog="ServiceOptionsDlg" Control="Back" Event="NewDialog"
> Value="ServiceCredentialsDlg">1</Publish>
> <Publish Dialog="ServiceOptionsDlg" Control="Next"
> Property="_DirectoryExists_Path" Value="[ARCHIVE_PATH]"
> Order="1">1</Publish>
> <Publish Dialog="ServiceOptionsDlg" Control="Next" Event="DoAction"
> Value="CheckArchiveDirectory" Order="2">1</Publish>
> <Publish Dialog="ServiceOptionsDlg" Control="Next"
Property="VErr_Text"
> Value="The archive path specified does not exist."
> Order="3"><![CDATA[_DirectoryExists_Result = "no"]]></Publish>
> <Publish Dialog="ServiceOptionsDlg" Control="Next" Event="SpawnDialog"
> Value="ValidationErrDlg" Order="4"><![CDATA[_DirectoryExists_Result =
> "no"]]></Publish>
> <Publish Dialog="ServiceOptionsDlg" Control="Next" Event="NewDialog"
> Value="VerifyReadyDlg" Order="5"><![CDATA[_DirectoryExists_Result =
> "yes"]]></Publish>
>
> When run to the installer and click the "Next" button, I get the
> spinning blue wheel of death.  I've tried adding a
> "System.Diagnostics.Debugger.Launch();" line to the above code but the
> debugger is never launched.  If I run a verbose log, it just ends at
the
> line before the custom action call.  Here's the last 5 lines:
>
> Action 10:41:55: ServiceOptionsDlg. Dialog created
> MSI (c) (20:44) [10:41:57:524]: Doing action: CheckArchiveDirectory
> Action 10:41:57: CheckArchiveDirectory.
> Action start 10:41:57: CheckArchiveDirectory.
> MSI (c) (20:6C) [10:41:57:541]: Invoking remote custom action. DLL:
>
> I'm stumped.   Any ideas or tips for debugging this would be
> appreciated.  I'm also encrypting (and decrypting) my .config files
> using this same managed custom action dll, so I know the DLL is
> partially working.  These custom actions are scheduled in the
> InstallExecuteSequence after "InstallFinalize", however.
>
> Thanks,
>
> Chris McKinnon
>
>
>
> The information contained in this e-mail is confidential and may
contain
> privileged information. It is intended only for the person or persons
> named above. If you are not an intended recipient of this e-mail
please be
> advised that any distribution or copying of this e-mail is prohibited.
If
> you have received this e-mail in error, please notify us by return
e-mail
> and delete all copies of the e-mail and any attachments.
>
------------------------------------------------------------------------
------
> Download new Adobe(R) Flash(R) Builder(TM) 4
> The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly
> Flex(R) Builder(TM)) enable the development of rich applications that
run
> across multiple browsers and platforms. Download your free trials
today!
> http://p.sf.net/sfu/adobe-dev2dev
> _______________________________________________
> WiX-users mailing list
> WiX-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/wix-users
>
>

--
View this message in context:
http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/Calling-a-
managed-custom-action-from-a-UI-control-tp5639681p5646237.html
Sent from the wix-users mailing list archive at Nabble.com.

------------------------------------------------------------------------
------
Download new Adobe(R) Flash(R) Builder(TM) 4
The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly
Flex(R) Builder(TM)) enable the development of rich applications that
run
across multiple browsers and platforms. Download your free trials today!
http://p.sf.net/sfu/adobe-dev2dev
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

The information contained in this e-mail is confidential and may contain
privileged information. It is intended only for the person or persons
named
above. If you are not an intended recipient of this e-mail please be
advised
that any distribution or copying of this e-mail is prohibited. If you
have
received this e-mail in error, please notify us by return e-mail and
delete
all copies of the e-mail and any attachments.

------------------------------------------------------------------------
----
--
Download new Adobe(R) Flash(R) Builder(TM) 4
The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly
Flex(R) Builder(TM)) enable the development of rich applications that
run
across multiple browsers and platforms. Download your free trials today!
http://p.sf.net/sfu/adobe-dev2dev
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users


------------------------------------------------------------------------
------
Download new Adobe(R) Flash(R) Builder(TM) 4
The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly
Flex(R) Builder(TM)) enable the development of rich applications that
run
across multiple browsers and platforms. Download your free trials today!
http://p.sf.net/sfu/adobe-dev2dev
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

The information contained in this e-mail is confidential and may contain 
privileged information. It is intended only for the person or persons named 
above. If you are not an intended recipient of this e-mail please be advised 
that any distribution or copying of this e-mail is prohibited. If you have 
received this e-mail in error, please notify us by return e-mail and delete all 
copies of the e-mail and any attachments.

------------------------------------------------------------------------------
Download new Adobe(R) Flash(R) Builder(TM) 4
The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly
Flex(R) Builder(TM)) enable the development of rich applications that run
across multiple browsers and platforms. Download your free trials today!
http://p.sf.net/sfu/adobe-dev2dev
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users


*** Confidentiality Notice: This e-mail, including any associated or attached 
files, is intended solely for the individual or entity to which it is 
addressed. This e-mail is confidential and may well also be legally privileged. 
If you have received it in error, you are on notice of its status. Please 
notify the sender immediately by reply e-mail and then delete this message from 
your system. Please do not copy it or use it for any purposes, or disclose its 
contents to any other person. This email comes from a division of the Invensys 
Group, owned by Invensys plc, which is a company registered in England and 
Wales with its registered office at 3rd Floor, 40 Grosvenor Place, London, SW1X 
7AW (Registered number 166023). For a list of European legal entities within 
the Invensys Group, please go to 
http://www.invensys.com/legal/default.asp?top_nav_id=77&nav_id=80&prev_id=77.

You may contact Invensys plc on +44 (0)20 3155 1200 or e-mail 
recept...@invensys.com. This e-mail and any attachments thereto may be subject 
to the terms of any agreements between Invensys (and/or its subsidiaries and 
affiliates) and the recipient (and/or its subsidiaries and affiliates).



------------------------------------------------------------------------------
Download new Adobe(R) Flash(R) Builder(TM) 4
The new Adobe(R) Flex(R) 4 and Flash(R) Builder(TM) 4 (formerly 
Flex(R) Builder(TM)) enable the development of rich applications that run
across multiple browsers and platforms. Download your free trials today!
http://p.sf.net/sfu/adobe-dev2dev
_______________________________________________
WiX-users mailing list
WiX-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wix-users

Reply via email to