[NSIS] PATH-variabele manipuleren

Pagina: 1
Acties:
  • 181 views sinds 30-01-2008
  • Reageer

  • maleadt
  • Registratie: Januari 2006
  • Laatst online: 30-11 18:38
Hey iedereen,

Ik ben net bezig met een "portable" versie van ActiveState's Perl te maken (ik hou er van om mijn favoriete applicaties op locatie te gebruiken:)), maar ik bots op enkele problemen: in het menu van mijn USB stick (hacked U3) plaats ik een verwijzing naar een uitvoerbaar bestand dat tijdelijk een item aan de PATH-variabele toevoeg (zodat ik de perl interpreter direct kan callen van de command line).
Om dat te verwezenlijking gebruik ik Nullsoft Scriptable Install System, maar er wordt niks toegevoegd aan de path variabele :?

Dit is het relevante stukje code (heb ff een msgbox ingelast om aan te tonen dat de code werkt :P):
code:
1
2
3
4
5
SetPath:
ReadEnvStr $R0 "PATH"
StrCpy $R0 "$R0;$PROGRAMDIRECTORY"
MessageBox MB_OK|MB_ICONINFORMATION  `ActivePerl has been added to the path enviromental variable (PATH=$R0)`
System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PATH", R0).r0'


Afbeeldingslocatie: http://users.telenet.be/maleadt/ActivePerlPortable.jpg


Zelf had ik gedacht dat het misschien aan de strengere policy van Vista kon liggen, maar 1) zelf met administratieve privilleges gebeurt er niks, en 2) zelf kan ik zonder enige administratieve tussenkomst de PATH variabele anders instellen (cmd => path=%path%;c:\blabla).

Enige info: Vista ultimate 32bit, nsis 2.23, meer hoeft er hier zeker niet? :P


greets,
maleadt

[ Voor 0% gewijzigd door maleadt op 18-02-2007 16:25 . Reden: 62bit? }:O ]


  • maleadt
  • Registratie: Januari 2006
  • Laatst online: 30-11 18:38
<bump>

Werkt dus ook niet op XP, kan dus onmogelijk aan Vista's policy liggen. Ziet iemand een mogelijk foutje in mijn code?

thx,
maleadt

Verwijderd

De functie SetEnvironmentVariable die je gebruikt wijzigd de environment alleen voor het aanroepende proces. Het installatieprogramma zal dus wel de aangepaste environment hebben na de aanroep, maar het aparte CMD.exe proces zal gewoon dezelfde environment houden.

Als je dus vanuit de NSIS installer het CMD.exe proces start, zal deze wel de juiste environment hebben:
code:
1
2
3
4
5
ReadEnvStr $R0 "PATH"
StrCpy $R0 "$R0;$PROGRAMDIRECTORY"
MessageBox MB_OK|MB_ICONINFORMATION  `ActivePerl has been added to the path enviromental variable (PATH=$R0)`
System::Call 'Kernel32::SetEnvironmentVariableA(t, t) i("PATH", R0).r0'
ExecShell "" "CMD.exe"


Zie evt. hier voor meer info: http://nsis.sourceforge.net/Setting_Environment_Variables

  • maleadt
  • Registratie: Januari 2006
  • Laatst online: 30-11 18:38
achzo! dat verklaart alles.
ferm bedankt :)

maleadt