windows - Hvordan opretter jeg en manifestfil i Visual Basic 6.0?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil oprette en manifest fil i VB 6.0. Når jeg starter min ansøgning, skal operativsystemet bede brugeren om administratorrettigheder. Jeg vil også gerne vide, hvordan det kan indlejres i ansøgningen?

Bedste reference


Du opretter faktisk ikke manifestfilen i VB. Et Windows-applikationsmanifest er et standard tekstdokument, formateret som XML. Du kan oprette det i Notesblok og gemme det med det relevante filnavn i din applikations katalog (YourAppName.exe.manifest).


Microsoft har flere oplysninger tilgængelige her: Application Manifests. Den indeholder endda en prøve manifest, som du simpelthen kan kopiere og indsætte i en tom tekstfil for at komme i gang. [15]


Det vigtige, hvis du vil have din ansøgning til at anmode brugeren om forhøjning, er at indstille requestedExecutionLevel til requireAdministrator snarere end asInvoker. Specifik information om brug af manifester med UAC er tilgængelig her. [16]


Så en fuld prøve kan se sådan ud:


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
  <assemblyIdentity
     version="1.0.0.0"
     processorArchitecture="*"
     name="MyMagicalApplication"
     type="win32"
  /> 
  <description>Sample manifest for your super cool application</description> 

  <!-- Request version 6 of the common controls. -->
  <dependency>
    <dependentAssembly>
      <assemblyIdentity
        type="win32"
        name="Microsoft.Windows.Common-Controls"
        version="6.0.0.0"
        processorArchitecture="*"
        publicKeyToken="6595b64144ccf1df"
        language="*"
      />
    </dependentAssembly>
 </dependency>

  <!-- Identify the application security requirements. -->
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel
          level="requireAdministrator"
          uiAccess="false"
        />
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>


Den traditionelle måde at integrere et manifest på i en eksekverbar, bruger mt.exe -værktøjet, som er tilgængeligt som en del af Windows SDK. [17]


VBAccelerator-webstedet har også nogle oplysninger om indlejring af manifester i et VB 6-program. Specifikt hedder det: [18]



  Der er to måder at give manifestet på: Den simpleste (men mindst elegante) måde er at give manifestet på disken til en eksekverbar. Lad os sige, at din ansøgning hedder TimeSlot.exe. Så hvis du gemmer manifestet XML ovenfor som


TimeSlot.exe.manifest

  
  I samme mappe som den eksekverbare, får TimeSlot.exe automatisk XP-stilarterne. VB5 og VB6 eksempler er tilvejebragt. Hvis du omdøber .manifest-filen, før du kører appen, kan du slukke for XP-stilarterne.

  
  En mere robust metode er at kompilere manifestet som en ressource i din ansøgning. For at gøre dette skal manifestet vises som ressourcetype RT\_MANIFEST (24) med id CREATEPROCESS\_MANIFEST\_RESOURCE\_ID (1). For nogle bizarre grunde skal du også sikre, at den resulterende XML-fil er en lige flere gange med 4 byte lang. Så hvis for eksempel din fil faktisk er 597 bytes, skal du tilføje fyldningsrum for at gøre filstørrelsen til 600 byte før kompilering. Resource eksemplerne demonstrerer, hvordan du opretter denne ressourcefil ved hjælp af et ressource compiler script (.rc fil) og RC.exe.



Men hvis du vil integrere manifestet automatisk , når du bygger din applikation fra VB 6 IDE, er du klar til lidt mere vanskelighed. VB 6 IDE understøtter ikke post-build-trin, så du kan ikke bare køre mt.exe på kommandolinjen for at gøre det for dig. Der er et par værktøjer, jeg har set på nettet, der hævder at automatisk integrere manifester for dig , men jeg tror de fleste af disse er ældre værktøjer, der kun håndterer anmodning om v6 af ComCtl32.dll. Jeg er ikke sikker på, om de er let udvidelige til også at omfatte UAC-tilladelserne, men det er et skød værd. Her er nogle links til at tjekke ud:



  • http://vb6zone.blogspot.com/2010/07/make-my-manifest.html

  • http://sourceforge.net/projects/ummm/

  • http://www.vbforums.com/showthread.php?t=606736

  • http://www.vbforums.com/showthread.php?t=430886


Andre referencer 1


Her er en måde at inkludere manifestet på byggetid for din VB6 app: [19] [20] [21] [22]



  1. Gem din manifestfil, måske kald det 'my.manifest'.

  2. Kontroller, at filstørrelsen er et flertal på fire, som Cody allerede nævnte. Hvis det er nødvendigt, pudse det med emner i slutningen.
    Se også: Indlejring af et applikationsmanifest i en VB6 exe

  3. Generer en ressourcefil 'my.rc' med følgende indhold:


    #define CREATEPROCESS\_MANIFEST\_RESOURCE\_ID 1
    #define RT\_MANIFEST 24
    CREATEPROCESS\_MANIFEST\_RESOURCE\_ID RT\_MANIFEST "my.manifest"
    


    Du kan finde flere oplysninger om de konstanter, der bruges på msdn blogs. Synes du skal bruge [24]


    #define ISOLATIONAWARE\_MANIFEST\_RESOURCE\_ID 2
    


    til et dll projekt.

  4. Brug rc.exe til at kompilere denne .rc-fil til en .res-fil.

  5. Tilføj den resulterende .res-fil til dit VB6-projekt.



Jeg har brugt dette i de sidste par måneder uden problemer på to gamle gamle programmer, der skulle køre på Windows 7. Du må muligvis eksperimentere med, hvordan du gemmer din manifestfil, men kun gemmer det som UTF8 uden BOM fungerede korrekt.


For at kontrollere, hvad der præcist bliver indlejret som manifesteret på denne måde, kan du også bruge mt.exe til at udtrække manifestet fra din udarbejdede exe/dll. Det var det, der hjalp mig med at finde BOM-problemet ...