The batch files in the InstallMusiXTeX folder in the musixtex distribution is for a single user (one account). I used %USERPROFILE% and %APPDATA% because they are both usable in Windows XP and 7.

The suggestions from David Allsop for more than one user (running musixtex from several login accounts) are very interesting,

Until now, i still am convinced that the easiest method for multiple users is putting the 'musixtexmf' and the 'tools' map in the C:\ root, if the installing method must be the same for XP and 7. I agree, it is not the standard method, but it are only 2 maps. There are also mitigating circumstances, because MIKTEX has also has put 'texmf' in the root in the earlier versions.

Andre

-----Oorspronkelijk bericht----- From: David Allsopp
Sent: Saturday, July 09, 2011 10:21 PM
To: 'Werner Icking Music Archive'
Subject: Re: [Tex-music] MusiXTeX file locations in Windows

Don Simons wrote:
David Allsopp wrote
>The only thing which should write to C:\Program Files or C:\Program
>Files
(x86) is a
>setup program (MiKTeX Package Manager falls into this category) -

I believe the MiKTeX installer does as well

Indeed - but that's a de facto setup program :)

>human beings
>(and normal programs) should not write *anything* there. That's why the
default
>permission for normal users is read-only for C:\Program Files and why
>even
programs
>can't write to it unless they're running elevated (of course, you're
running as
>Administrator on Windows XP then these facts are masked). The correct
>place
for
>shared data between all users is, for Windows Vista / Windows 7,
C:\ProgramData or
>C:\Users\Public (it's a matter of taste whether you want to put a
publically available third
>party tree in the hidden C:\ProgramData or C:\Users\Public\Documents)
>or
for
>Windows XP, it's C:\Documents and Settings\All Users\Application Data
>or C:\Documents and Settings\All Users\Documents.

Andre and I went back and forth on this when preparing the manual
mxinsuse.pdf and batch file instmus.bat (which calls setmaps.bat) for
installing MusiXTeX 1.15. It was Andre who came up with what I believe is
a very satisfying resolution. It involves using the built-in Windows
environment variable %APPDATA%. For example, when I type "set" in a
Windows XP command window, it tells me

APPDATA=C:\Documents and Settings\Don\Application Data

I believe %APPDATA% will represent a similar user-accessible path in
Windows Vista and 7. So for the default we had the batch file copy
MusiXTeX files into %APPDATA%\musixtexmf.

Yes, it does (C:\Users\you\AppData\Roaming - Windows Vista has 3 different Application Data folders per user, but Roaming is definitely the one to use here).

I'd guess this will work for 99% of the Windows users of MusiXTeX. For
the other 1% (who may have more than one user), I'm not sure what happens
if the MusiXTeX files are in one user's space and that path is listed as
a root in MiKTeX setup, but I'm about to do some testing that will answer
that question. In any event, setmaps.bat could be edited to point to

%ALLUSERSPROFILE%\Application Data\musixtexmf

Not quite - on Vista, ALLUSERSPROFILE already points to the equivalent of "Application Data". The best way would be to say

setlocal enableextensions
if defined ProgramData (
 rem Windows Vista onwards
 set INSTALL_TARGET=%ProgramData%\musixtexmf
) else (
 rem Windows XP and earlier
 set INSTALL_TARGET=%ALLUSERSPROFILE%\Application Data\musixtexmf
)

Do the batch files already have a switch to indicate whether they're installing for all users or just for the local user? (indeed, do they attempt to register the root directly using initexmf?). The obvious choice to me, mirroring initexmf itself, would be to add the --admin switch to the batch file - this would cause it to attempt to install for all users and also pass --admin to initexmf to register the new root for all users instead of just the current one. Incidentally, in that instance, the following snippet is handy for detecting whether you're running in an elevated command prompt in Windows Vista+:

set NOT_ELEVATED=0
ver | find "Version 6." > nul
if not errorlevel 1 (
 whoami /groups | find "S-1-16-12288" > nul
 if errorlevel 1 set NOT_ELEVATED=1
)

Then later on you can test %NOT_ELEVATED% and display an error rather than a whole load of "Access denied" when you attempt to copy files to a folder the user can't write!

HTH,


David

-------------------------------
TeX-music@tug.org mailing list
If you want to unsubscribe or look at the archives, go to http://tug.org/mailman/listinfo/tex-music
-------------------------------
TeX-music@tug.org mailing list
If you want to unsubscribe or look at the archives, go to 
http://tug.org/mailman/listinfo/tex-music

Reply via email to