none
Programm startet nicht wenn in C:\Programme(x86) installiert, aber in Kopie in C:\ RRS feed

  • Frage

  • Ich habe eine MFC Anwendung erstellt mit Visual Studio 2010 Professional und mit Installshield LE ein Installationsprogramm (setup.exe und .msi) erstellt. Die Installation läuft ab und installiert auf einem Windows 64Bit PC in C:\Programme (x86). Meine .exe ist im Unterverzeichnis Release. Beim Doppelklick auf die .exe startet das Programm nicht.

    Wenn ich das komplette Verzeichnis nach C:\ kopiere, startet und funktioniert es einwandfrei.

    Es werden offensichtlich irgendwelche Bibliotheken nicht gefunden. Selbst wenn ich alle mfc100*.dlls nach Release kopiere startet das Programm unter C:\Programme (x86) nicht.

    Wie kann ich in meinem MFC Programm herausfinden oder in den Projekteigenschaften einstellen, was von wo geladen wird und dementsprechend in meiner Installation bereitgestellt werden muss?

    Es ist zum Mäuse melken...

    Mittwoch, 12. November 2014 12:57

Antworten

Alle Antworten

  • Hallo Monika,

    zuallererst solltest Du uns mal verraten, welche Fehlermeldung Du erhältst. Bitte genau und vollständig posten. Falls da nichts aussagekräftiges zu sehen ist, schau bitte ins Windows Ereignisprotokoll, dort sollte man ggfs. mehr sehen.

    Solltest Du beim Anwendungsstart Dateien erstellen/ändern, wäre es wichtig zu wissen, in welchem Pfad Du das machst. In den Programme Ordner kann man als Normaler Benutzer nicht schreiben, daher empfiehlt es sich, die dafür vorgesehenen Ordner zu verwenden. Welche das sind, kannst Du bspw. hier sehen:

      http://msdn.microsoft.com/de-de/library/system.environment.specialfolder.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 12. November 2014 13:09
  • Hallo Stefan,

    es kommt keine Fehlermeldung. Aber der Tip mit dem Ereignisprotokoll war schon mal wertvoll.

    Es kommt folgendes

    Ich benötige vom Programm her nur Einträge in C:\Programme (x86)

    Die mfc-Dateien habe ich jetzt mal in Release reinkopiert, aber ich habe mit einem dependencywalker gesehen, dass diese von C:\system32 geladen werden. Dann müsste ich die aber auch dahin installieren?

    Mittwoch, 12. November 2014 13:54
  • Es kommt folgendes

    Mittwoch, 12. November 2014 13:58
  • Der Dateiaufbau ist so

    Mittwoch, 12. November 2014 14:07
  • Noch ein Hinweis:

    Wenn ich auf meinem Entwicklungsrechner das Setup nach C:\Programme(x86) mache, funktioniert der Programmstart...

    Mittwoch, 12. November 2014 14:18
  • Wasist das für ein Fehler, der da passiert. Scheinbar hast Du einen Fehler in Deiner Anwedung nicht abgefangen und Deine Anwednung crashed einfach.

    Grundsätzlich werden DLLs in der "normalen" DLL Suchreighenfolge (siehe) MSDN geladen.

    Du kannst auch die Anwendung im Release Mode debuggen. Was sagt der Debugger?


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de

    Mittwoch, 12. November 2014 14:18
    Moderator
  • Habe mal weitergegraben

    Hinweis: Es ist eine Unicode Anwendung.

    Werden von einer 32Bit Applikation die Dateien in SySWOW64 oder in System32 gesucht?

    Sind die mfc-Dateien für Win 32 und 64 Bit unterschiedlich?


    • Bearbeitet monika64 Mittwoch, 12. November 2014 15:25
    Mittwoch, 12. November 2014 14:35
  • Warum sollte die Anwendung nur crashen, wenn sie in c:\Programme(x86) gestartet wird, in C aber läuft.

    Der Release Start innerhalb VS lädt von SYSWOW64 und die mfc Dateien von meiner Anwendung aus dem Release Verzeichnis. Und das ganze ohne Fehlermeldung etc.

    • Bearbeitet monika64 Mittwoch, 12. November 2014 15:24
    Mittwoch, 12. November 2014 14:39
  • Hallo Monika,

    poste bitte die genaue und vollständige Meldung, wie Sie im Ereignisprotokoll zu sehen ist. Du kannst dort den gesamten Detailtext kopieren und hier einfügen. Ein Teilscreenshot bringt uns da nichts.

    Führ also bitte einen Doppelklick auf die von dir markierte Zeile im Ereignisprotokoll aus und poste dann all das, was im folgenden Dialog irgendwo zu finden ist.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 12. November 2014 17:23
  • Protokollname: Application
    Quelle:        Application Error
    Datum:         12.11.2014 13:32:27
    Ereignis-ID:   1000
    Aufgabenkategorie:(100)
    Ebene:         Fehler
    Schlüsselwörter:Klassisch
    Benutzer:      Nicht zutreffend
    Computer:      Elite
    Beschreibung:
    Name der fehlerhaften Anwendung: Kart.exe, Version: 2.0.1.4, Zeitstempel: 0x5463469f
    Name des fehlerhaften Moduls: MSVCR100.dll, Version: 10.0.40219.325, Zeitstempel: 0x4df2be1e
    Ausnahmecode: 0x40000015
    Fehleroffset: 0x0008d6fd
    ID des fehlerhaften Prozesses: 0x13f8
    Startzeit der fehlerhaften Anwendung: 0x01cffe74b71c41a5
    Pfad der fehlerhaften Anwendung: C:\Program Files (x86)\KartCheck\Release\Kart.exe
    Pfad des fehlerhaften Moduls: C:\Program Files (x86)\KartCheck\Release\MSVCR100.dll
    Berichtskennung: f5d5c804-6a67-11e4-b4bd-a0d3c11551b0
    Ereignis-XML:
    <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
      <System>
        <Provider Name="Application Error" />
        <EventID Qualifiers="0">1000</EventID>
        <Level>2</Level>
        <Task>100</Task>
        <Keywords>0x80000000000000</Keywords>
        <TimeCreated SystemTime="2014-11-12T12:32:27.000000000Z" />
        <EventRecordID>2678</EventRecordID>
        <Channel>Application</Channel>
        <Computer>Elite</Computer>
        <Security />
      </System>
      <EventData>
        <Data>Kart.exe</Data>
        <Data>2.0.1.4</Data>
        <Data>5463469f</Data>
        <Data>MSVCR100.dll</Data>
        <Data>10.0.40219.325</Data>
        <Data>4df2be1e</Data>
        <Data>40000015</Data>
        <Data>0008d6fd</Data>
        <Data>13f8</Data>
        <Data>01cffe74b71c41a5</Data>
        <Data>C:\Program Files (x86)\KartCheck\Release\Kart.exe</Data>
        <Data>C:\Program Files (x86)\KartCheck\Release\MSVCR100.dll</Data>
        <Data>f5d5c804-6a67-11e4-b4bd-a0d3c11551b0</Data>
      </EventData>
    </Event>
    Mittwoch, 12. November 2014 17:49
  • Ich denke das ist ein Rechteproblem. Wenn es von C: geht und von einem anderen Verzeichnis nicht.
    Donnerstag, 13. November 2014 16:04
  • Ich denke das ist ein Rechteproblem. Wenn es von C: geht und von einem anderen Verzeichnis nicht.

    Nun nicht wirklich. Es ist ein Anwendungsproblem :-).

    Du kannst zum Test ja mal veresuchen die Anwendung als Administrator im Verzeichnis C:\Program Files (x86) laufen lassen, wenn dann Deine Anwendung geht, dann vermute ich Du greifst schreibend auf C:\Program Files (x86) zu, und das ist ein NoGo für jede Anwendung, es sei denn Du forderst über das Manifest Admin Rechte an...


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.

    Freitag, 14. November 2014 05:43
  • OK, das war wirklich ein Hinweis. Es gibt 3 Verzeichnisse auf deren Dateien geschrieben wird.

    Wo soll ich die dann hin installieren? Wie findet die Applikation zur Laufzeit diese Verzeichnisse? Welche Änderungen sind im Programm dann notwendig?

    Gruß Monika


    • Bearbeitet monika64 Freitag, 14. November 2014 15:05
    Freitag, 14. November 2014 14:43
  • Hallo Monika,

    das hatte ich dir doch ganz am Anfang schon geschrieben.

    Solltest Du beim Anwendungsstart Dateien erstellen/ändern, wäre es wichtig zu wissen, in welchem Pfad Du das machst. In den Programme Ordner kann man als Normaler Benutzer nicht schreiben, daher empfiehlt es sich, die dafür vorgesehenen Ordner zu verwenden. Welche das sind, kannst Du bspw. hier sehen:

      http://msdn.microsoft.com/de-de/library/system.environment.specialfolder.aspx


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 14. November 2014 15:05
  • Da sind ca. 50 Ordner angegeben! Kannst mir den einen vll nennen?
    Freitag, 14. November 2014 16:06
  • Da sind ca. 50 Ordner angegeben! Kannst mir den einen vll nennen?

    Hallo Monika,

    natürlich sind das viele. Du sollst dir ja auch den raussuchen, der für deine Anwendung geeignet ist.

    Bei jeder Angabe steht eine detaillierte Beschreibung dabei. Die solltest Du lesen.

    LocalApplicationData
    ApplicationData
    CommonApplicationData
    MyDocuments
    Personal
    ...

    Was davon in deinem Fall richtig wäre, musst Du anhand deiner Anforderungen entscheiden.

    Ein wenig Arbeit musst Du schon selbst erledigen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 14. November 2014 16:12
  • Meine Anforderung ist, dass ich Daten ablegen kann und ini Dateien abändern kann und dass der Benutzer den Data und ini Ordner kopieren und mailen kann.
    Freitag, 14. November 2014 16:22
  • Hallo Monika,

    und anhand dieser Anforderungen kannst Du dir jetzt die Beschreibungen der o.g. Ordner durchlesen und entscheiden, welchen der Ordner Du wofür nimmst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 14. November 2014 16:24
  • Was bedeuten denn z. B. die x in der ersten Spalte?

    Und kannst du mir hinsichtlich der obigen Fragen

    Wie findet die Applikation zur Laufzeit diese Verzeichnisse?

    Welche Änderungen sind im Programm dann notwendig?

    noch was konkretes sagen?

    • Bearbeitet monika64 Freitag, 14. November 2014 16:29
    Freitag, 14. November 2014 16:25
  • Hallo Monika,

    Was bedeuten denn z. B. die x in der ersten Spalte?

    Einfach mit der Maus über das Symbol gehen und den Tooltip lesen.

    Wie findet die Applikation zur Laufzeit diese Verzeichnisse?

    Dafür gibt es in der o.g. Seite ganz unten ein Codebeispiel in C#, VB und C++

    Welche Änderungen sind im Programm dann notwendig?

    Das weiß ich doch nicht!? Ist doch dein Programm und ich kenne das nicht. Generell musst Du die Stellen, an denen Du Dateien, Ordner, ... erzeugst, prüfe und entsprechend anpassen. Was Du da wo und wie anpassen musst, kann dir keiner sagen. Es kennt ja keiner deinen Code.



    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Freitag, 14. November 2014 17:42
  • Hallo Monika

    Hast Du schon mal überlegt, ob Dein Programm irgendwelche Dateien schreibt oder drauf zugreift und dies unter Win7 in bestimmten Verzeichnissen ohne mit Administratorrechten gestartet zu sein nicht mehr darf?

    Ich hab mich beim Umstieg auf Win7 oft genug geärgert, dass ich meine INI-Dateien, die ich immer brav im aktuellen Verzeichnis hatte, nicht mehr schreiben durfte, weil ich ja im Programme-Ornder war und nicht am Desktop.

    Grüße

    FireHeart

    Montag, 17. November 2014 13:14
  • Hallo Stefan,

    die Antwort hätte ja auch sein können, dass Windows automatisch in den CommonApplicationData Ordner oder den anderen Ordnern sucht, wenn ein Programm so installiert ist...

    Montag, 17. November 2014 17:37
  • Hallo Jungs, vielen Dank für die Antworten.

    Habe viel daraus gelernt. Vor allem, dass das Schreiben in C:\Program Files (x86) nicht geht ohne Admin-Rechte.

    Werde mein Programm jetzt doch fest nach C: installieren, da der Kunde die Verzeichnisse sonst nicht findet, wenn die zu sehr verteilt sind. Ich brauche öfter mal Dateien zu Diagnosezwecken.

    Montag, 17. November 2014 17:41