Αποστολέας Θέμα: Εγκατάσταση του διερμηνευτή στα Windows 7  (Αναγνώστηκε 57 φορές)

bugman

  • Δεινόσαυρος
  • *****
  • Μηνύματα: 376
  • The Bug Eater
    • Πληροφορική Προγραμματισμός
Εγκατάσταση του διερμηνευτή στα Windows 7
« στις: 17 Αύγ 2019, 01:44:28 μμ »
Έτυχε πριν λίγες μέρες να βάλω τον διερμηνευτή σε έναν φορητό με Window 7, 32 bit, ο οποίος είχε την προστασία για εκτέλεση μη κανονικού λογισμικού, μέσω του UAC (User account Control).
Κάθε φορά που εκτελούσα το διερμηνευτή έβγαινε το παράθυρο διαλόγου του UAC και με ρώταγε αν θέλω να κάνω αλλαγές στον υπολογιστή εκτελώντας ένα πρόγραμμα άγνωστης προέλευσης. Μια λύση είναι να μηδενίσουμε την ασφάλεια στο σύστημα απενεργοποιόντας το UAC, αλλά αυτό δεν είναι σωστό.
Επειδή είχα ρυθμίσει το signtool.exe (υπάρχει στο SDK των Windows, το οποίο πρέπει να κατέβει χωριστά, δεν το έχουν τα Windows από την αρχή), να βάζει πιστοποιητικό εκδότη, σκέφθηκα να λύσω το πρόβλημα αλλάζοντας το Uknown publisher με το Μ2000 πιστοποιητικό.
Για να εκτελεστεί το signtool.exe πρέπει να το γράψουμε σε ένα bat αρχείο και να το εκτελέσουμε με την επιλογή ως διαχειριστής. Επιπλέον επειδή το πρόγραμμα γράφεται εδώ: C:\Program Files\Γλώσσα\Γλώσσα.exe αυτό θα πρέπει να δώσουμε το λεγόμενο short path, το οποίο εύκολα βγαίνει με μια συνάρτηση της Μ2000. Η παρακάτω εντολή δίνει στο πρόχειρο την γραμμή που θα βάλουμε στο Γλώσσα.bat (ασφαλώς στην path μεταβλητή περιβάλλοντος των windows πρέπει να υπάρχει το μονοπάτι που βρίσκει το σύστημα το signtool.exe).
εκτέλεση σε Μ2000
clipboard "signtool.exe sign "+shortdir$("C:\Program Files\Γλώσσα\Γλώσσα.exe")

αντιγραφή σε Γλώσσα.bat (στο Documents)
signtool.exe sign C:\PROGRA~1\9D12~1\971D~1.EXE

Παρόλα αυτά, το  UAC δείχνει την αλλαγή του εκδότη, αλλά πάλι προτρέπει για να εκτελέσουμε ή όχι την εφαρμογή γλώσσα.exe

Αυτό μου θύμισε ότι λείπει το manifest, το οποίο είναι ένα κείμενο που θα υπάρχει εντός του κώδικα σε resource όπως λέγεται ή θα είναι εξωτερικό. Οπότε πήρα ένα της Μ2000 και άλλαξα το όνομα της εφαρμογής, άλλαξα το όνομα αρχείου σε Γλώσσα.manifest και αφού το έσωσα στο Documents, έκανα μεταφορά στο C:\Program Files\Γλώσσα\   (όπου πάλι το σύστημα με ρώτησε αν θέλω να γίνει, γιατί κανονικά δεν το επιτρέπει)


Δείτε ότι το αρχείο λέει ότι έχει encoding UTF-8, δηλαδή πρέπει να το σώσουμε από το notepad με την επιλογή UTF-8.

Κώδικας: [Επιλογή]
<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"

manifestVersion="1.0">
  <assemblyIdentity
    version="7.0.0.3"
    processorArchitecture="X86"
    name="Γλώσσα.exe"
    type="win32"
    />
  <description>M2000 Environment</description>
    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
       <application>
           <!-- Windows 8.1 -->
            <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
           <!-- Windows 8 -->
            <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
           <!-- Windows 7 -->
            <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
           <!-- Windows Vista -->
            <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
       </application>
    </compatibility>
<!-- Identify advanced options: Vista and above -->
  <asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
      <asmv3:windowsSettings

xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">
        <disableTheming>true</disableTheming>
      </asmv3:windowsSettings>
  </asmv3:application>
</assembly>


Τώρα δουλεύει σωστά χωρίς να ρωτάει κάθε φορά αν θέλω να το εκτελέσω.