.net - 'Den angivne procedure kunne ikke findes' efter deaktivering af wow64-omdirigering

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg kører en 32bit applikation på et x64-system. (Windows 7)
Jeg forsøger at køre windows backup, som er placeret på: c: \ System32 \ sdclt.exe.
Fordi jeg kører som en 32-bitsproces, skal jeg deaktivere WOW64-omdirigering (ved hjælp af Wow64DisableWow64FsRedirection).
Problemet er, at efter at deaktivere wow64-omdirigering får jeg 'Fejlen' Den angivne procedure kunne ikke findes '.


Mit gæt er, at når man deaktiverer omdirigering, kan sdclt.exe ikke indlæse alle dens afhængige dll'er.


noter:
1. Dette sker kun, hvis jeg ikke kører med forhøjede privilegier.
2. Jeg sætter 'brug shell udføre' til sand, fordi jeg vil lade brugerne bruge min app uden forhøjede privilegier.
2. Denne fejl er ikke tilfældet, når der kompileres til 64 bit.

Bedste reference


Deaktivering af omdirigering af filer er en usikker forretning. Du gør det her for at din 32-bitsproces skal kunne se filen i system32. Normalt vil enhver henvisning til den mappe fra en 32-bit proces blive omdirigeret til SysWOW64. Men som du opdagede, bryder deaktivering af omdirigering af filer andre links i kæden.


Den bedste løsning, jeg ved, er at bruge det specielle \%windir\%sysnative alias for at kunne finde den sande system32-mappe. Du må ikke deaktivere omdirigering af filer og bare passere \%windir\%sysnativesdclt.exe, når du gyder processen.


Dokumentationen for omdirigering af filer siger: [7]



  32-bit applikationer kan få adgang til det native systemkatalog ved at erstatte\% windir\% \ Sysnative for\% windir\% \ System32. WOW64 genkender Sysnative som et specielt alias, der bruges til at angive, at filsystemet ikke skal omdirigere adgangen. Denne mekanisme er fleksibel og nem at bruge, derfor er det den anbefalede mekanisme at omgå filsystemet omdirigering. Bemærk, at 64-bit applikationer ikke kan bruge det Sysnative alias, da det er en virtuel mappe, der ikke er en rigtig.

  
   Windows Server 2003 og Windows XP : Det Sysnative alias blev tilføjet startende med Windows Vista.



Den endelige advarsel betyder effektivt, at \%windir\%Sysnative ikke genkendes på XP64, medmindre maskinen er blevet serviceret med MS-hotfixet, der svarer til \%windir\%Sysnative til det pågældende operativsystem. I praksis betyder det ikke, at XP64 installeret base er forsvindende lille.


Den eneste anden løsning, jeg kender til, er at oprette din egen dedikerede launcher, der er en 64-bit proces. Hvis du placerer den launcher i en mappe, der ikke er genstand for filomdirigering, kan du ringe til den startboks fra din 32 bit-proces, og så er launcher i stand til at se 64 bit systemkataloget. Jeg tror, ​​du skal bruge denne fremgangsmåde, hvis du har brug for at understøtte XP64.

Andre referencer 1


Jeg havde et lignende problem. Jeg har bemærket, at problemet kun opstod på Windows 7 x64-systemer uden SP1 installeret. På systemer, hvor der opstod et problem, blev opgraderingen til SP1 rettet.