Avatar billede scorp-d Nybegynder
26. maj 2010 - 10:48 Der er 9 kommentarer

Få stien til en fil i miljøvariablen Path

Hej.

Jeg har lavet en lille program som installere printerdrivere og derefter (ghostscript)printere vha. "rundll32 printui.dll,PrintUIEntry" / "PRINTUI.EXE".

Problemet ligger i at jeg skal fortælle printUI hvor filen ghostpdf.inf ligger.

ghostpdf.inf ligger en i en mappe som altid er defineret i miljøvariablen Path, så jeg kunne køre alle mapperne igennem for at finde filen, men findes der ikke en allerede implementerede metode til at gøre dette, eller et registre man kan slå op i ?

Ligesom hvis man skriver ghostpdf.inf i cmd(og den ligger i en mappe som er i Path), så åbner den filen øjeblikkelig.

På forhånd tak
Scorp-D
Avatar billede scorp-d Nybegynder
26. maj 2010 - 11:21 #1
Kan godt ske at jeg nøjes med at køre alle mapperne igennem... efter lidt test på forskellige maskiner er den gennemsnitlige søgetid under 3 millisekunder vha. følgende kode:

string getEnviroPath(string file)
{
    foreach (string path in System.Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine).Split(';'))
    {
        if (File.Exists(path + gsInfPath))
        {
            return path + gsInfPath;
        }
    }
    return null;
}

Men vil stadig gerne høre hvis der findes en allerede implementerede metode !
Avatar billede scorp-d Nybegynder
26. maj 2010 - 12:41 #2
gsInfPath skal self være file....
Avatar billede arne_v Ekspert
27. maj 2010 - 02:50 #3
Jeg kan ikke se hvordan det skulle kunne gøres hurtigere.
Avatar billede scorp-d Nybegynder
27. maj 2010 - 07:34 #4
Ja det er også rigtigt...

Undrede mig bare over at opslaget er så hurtigt i command... Så troede at det benyttede et registre, og ikke bare lavede en søgning.
Avatar billede arne_v Ekspert
01. juni 2010 - 04:00 #5
Hvordan har du målt det i COMMAND til meget hurtigere end 3 millisekunder?
Avatar billede scorp-d Nybegynder
01. juni 2010 - 09:50 #6
Har heller ikke målt det til at være hurtigere...!

Siger bare at COMMAND altid har lavet et hurtigt/øjeblikkeligt opslag, på alle maskiner jeg har prøvet, lige meget hvor mange dirs der var i Path, og hvor langsom maskinen reelt set var.

Så gik bare ud fra at filer der ligger i mapperne som er defineret i Path, blev indekseret vha. et registre, og det var en af grundene til at man skulle logge ud/ind eller broadcaste en WM_SETTINGCHANGE meddelelse, for at få filerne i de nye dirs med.
Avatar billede arne_v Ekspert
01. juni 2010 - 19:02 #7
3 millisekunder er meget hurtigt. Forskellen paa 3 millisekunder og oejeblikkeligt tror jeg ikke kan observeres af det menneskelige oeje.

Mit gaet er at processer ved start for en kopi af PATH og at man skal genstarte for at faa en ny PATH - ikke at EXE/BAT/VBS i PATH indexeres.

Men det er nem at teste. Kan Windows finde en ny EXE som er oprettet efter login men ligger i PATH?

(jeg mener bestemt at svaret er ja)
Avatar billede scorp-d Nybegynder
01. juni 2010 - 21:10 #8
Jeg var heller ikke af den overbevisning at der benyttes et registre, efter  jeg kom frem til de 3 ms. hvor du begyndte at skrive.

Der spurgte jeg bare om "der findes en allerede implementerede metode ! ", lignende den jeg kom frem til.
Avatar billede arne_v Ekspert
13. juni 2010 - 03:54 #9
Jeg kan som sagt ikke se hvordan det skulle kunne lade sig gøre.

Og tilsyneladende er der heller ikke andre som kender en metode.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester