|
![](/i/fill.gif) |
Hi,
I'm trying to create a Windows Installer package (.msi) for POV-Ray, so
I can deploy it on 11 or more computers in a school, through Windows
2000 Server.
As students are not supposed to have installation privileges, POV-Ray
would be installed on a machine basis, not a user basis (i.e. it would
be installed with admin / system privileges, but accessible from any
user). Herein lies the problem: the pvengine.exe binary has problems
recognizing the installaton path, which is apparently stored as per-user (
HKCU) registry key, not a machine-wide (HKLM) one.
I've found three different behaviours when trying to launch POV-Ray with
a different user than the one it was installed with:
A) it would complain about a missing "Home" key in the registry. That
one, however, was created (by the installation program) in both HKCU _
and_ HKLM (for whatever reason).
Code bit:
-----
getHome () ;
if (HomePath [0] == '\0')
{
MessageBox (NULL,
"ERROR : Cannot find Home entry in registry.\n\n"
"This entry should have been set by the installation
program.\n\n"
"If you did not install using the correct installation
procedure, please "
"do this before running POV-Ray for Windows.\n\n"
"Otherwise, consult the README file that should have
accompanied this executable file.",
"Critical Error",
MB_ICONSTOP) ;
return (1) ;
} }
-----
"getHome()" seems to look at "HKCU" first, and if that one fails, it'll
try with "HKLM" instead. That's fine. I dunno why I ever received this
error message then.
B) it would complain about not being able to access its INI files. One
would expect the program to try relative paths first, but it seems not.
Relevant code:
-----
if (stat (EngineIniFileName, &statbuf) != 0 || (statbuf.st_mode & S_
IFREG) != 0)
{
if (debugFile)
fprintf (debugFile, "INI directory not found\n") ;
MessageBox (NULL,
"ERROR : Cannot find INI directory in expected location\
n\n"
"This directory should have been created by the
installation program.\n\n"
"If you did not install using the correct installation
procedure, please "
"do this before running POV-Ray for Windows. Otherwise,
consult the README.DOC "
"file that should have accompanied this executable file.
",
"Critical Error",
MB_ICONSTOP) ;
return (1) ;
} }
-----
This error message mentions a "README.DOC" file, which doesn't exist;
the "readme.txt" file consists mostly of information regarding the
rendering engine.
If the error message included the current "HomePath" var, that would
ease debugging greatly. Maybe getHome() returned the wrong contents?
[ C) it wouldn't launch at all, as in: it wouldn't react to it being
launched. This may be a Windows XP bug, however. ]
The process of creating the MSI package works by launching the "povwin35.
exe" setup file with specified parameters, and watching it through a
capturing tool. The parameters we're giving the setup are:
1. custom destination folder: "C:\Applications\Graphics\POV-Ray" (
adhering to school-wide standards)
2. no backup folder (as this isn't an upgrade install)
3. custom shortcut folder: "Graphics\POV-Ray"
4. no update checking (as we manually check for new program versions for
the whole network, then update the deployed packages)
It would then ask to do a test render, which works fine. Then we remove
all traces of the program, customize the created MSI package and run
that one instead. Running POV-Ray as the same user again would work.
Running it as a test user of one of the students, however, will give one
of the three problems A / B / sometimes C.
I suspect that even though the installer offers to install into a custom
directory, the app does not truly support this, and still expects at
least some of its files to reside in C:\Programs\POV-... - this, however,
is bad application design (and not something I'd expect from this
otherwise great program). As the source code is open
I'm not familiar with C much, so I'm not sure if I can help fix this,
but there is something wrong either with the Wise installer, or with
what happens at pvengine.exe launch time.
I'd appreciate any help.
--
<http://www.chucker.rasdi.net>
Post a reply to this message
|
![](/i/fill.gif) |