Benutzer mit den meisten Antworten
Programm startet nicht wenn in C:\Programme(x86) installiert, aber in Kopie in C:\

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...
- Verschoben Tom Lambert (Koopakiller) Mittwoch, 12. November 2014 13:08 Keine Frage zur IDE
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- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 19. November 2014 13:50
-
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.- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 19. November 2014 13: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- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 18. November 2014 09:49
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 19. November 2014 13:43
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- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 19. November 2014 13:50
-
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?
-
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
-
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
-
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
-
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 -
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> -
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.- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 19. November 2014 13: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
-
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- Als Antwort vorgeschlagen Dimitar DenkovMicrosoft contingent staff, Administrator Dienstag, 18. November 2014 09:49
- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Administrator Mittwoch, 19. November 2014 13:43
-
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 -
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 -
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
-
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 -
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
-
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.