[Openmcl-devel] CCL application quits if run from installer that doesn't set "required execution level".

Kaz Kylheku kaz at kylheku.com
Tue Nov 11 19:37:08 PST 2014


[This is a repost. Sincere apologies if you
are seeing this twice!]

Hi All,

This is more of a FYI than a bug report. I recently did
some maintenance on an application, and part of that was
bringing it to a newer CCL (2010 to 2014).

Something stopped working: namely, the final launch of the
application from the installer.

The Lisp part of the application, in my case, is actually
run by a "launcher" program that is written in C++ using
Visual Studio. That launcher uses CreateProcess to run the
background Lisp engine written using Clozure.

Anyway, it all still worked fine except when the launcher
was run from the NSIS-generated installer. The
CreateProcess would work, but the executable would bail
very early in its execution with an exit code of 1, and no
console output.

This was not reproducible outside of the installer;
launching the program in any other way failed to reproduce
the issue.

I discovered that the issue is linked to neglecting to request an 
execution level for the install script. When I added this to the 
install-generator script, the problem went away:

   RequestExecutionLevel admin

A value of "user" will probably also work.

http://nsis.sourceforge.net/Docs/Chapter4.html#arequestexecutionlevel

This execution level doesn't affect the Visual-Studio-
generated C++ program at all, but CCL is somehow sensitive
to it. Perhaps Windows 7 is running the executable in some
"compatibility mode" that CCL somehow doesn't like.

I don't think there is anything necessarily to fix in CCL;
but it's something to be aware of for anyone who is
packaging CCL programs in installers in Windows and wants
to let the user optionally run the software as
post-installation step.

This problem also showed me I'm doing something wrong: running the 
application in the elevated context of the installer!

I ended up doing the launch indirectly, via explorer invoked on
the installed shortcut:

    Exec '"$WINDIR\explorer.exe" "$SMPROGRAMS\Tankan\tankan.lnk"

Evidently, this simple trick lowers the privilege level.

Cheers ...



More information about the Openmcl-devel mailing list