c# programm (.exe) aus C unter Windows 7 ausführen



  • Hallo,
    ich bin nicht sicher, ob ich hier in diesem Forum richtig bin weil dises Thema c und c# berührt aber ich denke dass problem eher c# betrifft.
    ich versuche aus einem C-programm einen c# exe mit WinExec-Funktion auszuführen

    WinExec("pfad\\meine.exe", SW_SHOWNORMAL);
    

    das c#-Program wird aufgerufen und es kommt zu einer fehlermeldung dass der Zugriff verweigert (c# programm soll einen Eintrag in der registry machen).
    ich habe geggogelt und habe die Möglichkeit mit der manifest wegen Adminrechte gefunden. dann ich habe ich einen Anwendungmanifestdatei in mein c# programm hinzugefügt

    <?xml version="1.0" encoding="utf-8"?>
    <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
      <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
        <security>
          <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
            <!-- UAC-Manifestoptionen
              Wenn Sie die Zugangsebene für das Windows-Benutzerkonto ändern möchten, ersetzen Sie den 
              requestedExecutionLevel-Knoten durch eines der folgenden Elemente.
    
            <requestedExecutionLevel  level="asInvoker" uiAccess="false" />
            <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
            <requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
    
                Durch Angeben des requestedExecutionLevel-Knotens wird die Datei- und Registrierungsvirtualisierung deaktiviert.
                Wenn Sie Datei- und Registrierungsvirtualisierung für Abwärts- 
                kompatibilität verwenden möchten, löschen Sie den requestedExecutionLevel-Knoten.
            -->
            <requestedExecutionLevel  level="requireAdministrator" uiAccess="false" />
          </requestedPrivileges>
        </security>
      </trustInfo>
    
      <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
        <application>
          <!-- Eine Liste aller Windows-Versionen, mit denen die Anwendung kompatibel ist. Windows wählt automatisch die am stärksten kompatible Umgebung aus.-->
    
          <!-- Wenn die Anwendung mit Windows 7 kompatibel ist, heben Sie die Kommentierung des folgenden supportedOS-Knotens auf.-->
          <!--<supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>-->
    
        </application>
      </compatibility>
    
      <!-- Designs für allgemeine Windows-Steuerelemente und -Dialogfelder (Windows XP und höher) aktivieren -->
      <!-- <dependency>
        <dependentAssembly>
          <assemblyIdentity
              type="win32"
              name="Microsoft.Windows.Common-Controls"
              version="6.0.0.0"
              processorArchitecture="*"
              publicKeyToken="6595b64144ccf1df"
              language="*"
            />
        </dependentAssembly>
      </dependency>-->
    
    </asmv1:assembly>
    

    mit der Manifestdatei wird das c# Program nicht aufgerufen. WinExec liefert mir in diesem Fall 0 zurücl (out of memory)



  • msdn sagt zu WinExec:

    msdn schrieb:

    Note This function is provided only for compatibility with 16-bit Windows

    ...nimm lieber ShellExecute oder CreateProcess.

    C# Anwendungen haben üblicherweise bereits eine manifest-Datei (die als Resource in die .exe eingebettet ist)

    Läuft die c#-exe wenn man sie per Hand startet denn fehlerfrei?



  • Hallo,
    problem gelöst.
    das funktiniert bei mir nur mit ShellExecute
    CreateProcess liefert einnen Fehler 740 = "Der angeforderte Vorgang erfordert erhöhte Rechte."


Anmelden zum Antworten