[C#] System.Environment.GetEnvironmentVariable

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik heb een applicatie waar ik een script aan kan meegeven als argument. Dit script wordt dan geopend en vervolgens uitgevoerd.
Ik gebruik dit vrnl. om periodieke tests uit te voeren. Ik heb een folder met een heleboel scripts die ik dan in 1 keer wil testen. Er kan maar 1 script per keer worden mee gegeven.
Ik heb hiervoor een batch bestandje gemaakt:
code:
1
2
3
4
5
6
7
call setenv -a BATCHTEST 0
rem run all C# scripts:
for %%a in (*.cs) do (
  echo running %%a
  call %_mw% %cd%\%%a
)
setenv -d BATCHTEST


Dit werkt prima. Omdat ik de scripts ook interactief gebruik, maak ik een system variabele aan het begin van mijn script met SetEnv.exe en verwijder die weer aan het einde.

In mijn scripts roep ik in de main de volgende functie aan:
C#:
1
2
3
4
5
6
7
8
9
private static void CheckEnv()
{
    // Check if the environment variable is set:
    string tmp = System.Environment.GetEnvironmentVariable("BATCHTEST");
    if (tmp == "0")
    {
        calledAsBatch = true;
    }
}

Uiteraard wordt calledAsBatch aan het begin op false gezet.
Als calledAsBatch true is, sluit ik de applicatie met:
C#:
1
2
if (calledAsBatch)
    Application.ExitThread();


Als ik mijn batch start en ik kijk in een ander cmd window naar de env. vars. met het commando set, dan zie ik dat BATCHTEST is gezet. Maar mijn CheckEnv functie ziet het niet.
Als ik vervolgens de batch afbreek en opnieuw start dan wel.

Het lijkt er dus op dat die env. vars niet worden ververst of zo.

Iemand een suggestie?

Acties:
  • 0 Henk 'm!

  • zzattack
  • Registratie: Juli 2008
  • Laatst online: 23:24
Ik weet niet hoe het precies onder Windows zit, maar is je env var wel permanent en wordt ie ge-export? Is het een variable voor alleen jouzelf als gebruiker of is hij system-wide? En kun je, als je naar pc eigenschappen/advanced settings/environment variables wel je var zien?
Overigens lijkt me de commandline beter geschikt voor wat je probeert te bereiken.

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16-09 15:42

Sebazzz

3dp

zzattack schreef op dinsdag 24 november 2009 @ 13:58:
Overigens lijkt me de commandline beter geschikt voor wat je probeert te bereiken.
Ik ga mee, de commandline is beter bedoeld voor dit soort dingen. Tenzij de TS geen invloed heeft op de batchbestanden die zijn programma uitvoeren stel ik inderdaad de commandline voor.

C#:
1
void Main(String[] args)

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Inderdaad heb ik geen invloed op de argumenten die ik kan meegeven.
Als ik de documentatie van SetEnv.exe bekijk, moeten env. vars die hiermee zijn gezet direct beschikbaar zijn.
Ik kan natuurlijk een aparte batch-file maken die SetEnv.exe aanroept en een 'parent' batch-file die eerst die batch-file aanroept en dan vervolgens de batch met de scripts.
Ik zal dat even testen. Ik had alleen gehoopt dat er iets in C# was als System.Environment.Refresh()

Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Verwijderd schreef op dinsdag 24 november 2009 @ 14:45:
Ik zal dat even testen. Ik had alleen gehoopt dat er iets in C# was als System.Environment.Refresh()
Kijk eens naar de overload van GetEnvironmentVariable, daarmee kun je aangeven dat 'ie de environment variables uit 't registry moet halen ipv de environment variables moet gebruiken die mee worden gegeven bij het inladen van het process.

Acties:
  • 0 Henk 'm!

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 16-09 15:42

Sebazzz

3dp

Misschien een wilde gok: In een apart AppDomain de env var opvragen, of het proces nog een keer starten?

[ Voor 20% gewijzigd door Sebazzz op 24-11-2009 15:43 ]

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Waarom gebruik je setenv en niet gewoon set?

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1