Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Vista behauptet mein Programm funktioniert nicht mehr (https://www.delphipraxis.net/136694-vista-behauptet-mein-programm-funktioniert-nicht-mehr.html)

HeikoAdams 6. Jul 2009 10:05


Vista behauptet mein Programm funktioniert nicht mehr
 
Hallo,
beim Testen meiner Anwendung unter Windows Vista musste ich feststellen, dass Vista nach dem Beenden meldet, mein Programm würde nicht mehr funktionieren. Dabei wurde das Programm aber normal geschlossen. Ich habe keine Idee, wie Vista auf diese Idee kommt, da im Destroy-Event nur eine Datenbankverbindung beendet, eine StringListe freigegeben und der Anwendungsmutex freigegeben wird. Komischerweise kommt diese Meldung auch nur dann, wenn zuvor eine bestimmte Programmfunktion ausgeführt wurde. :wiejetzt:

Ich bin für jeden Tip dankbar.

Satty67 6. Jul 2009 10:22

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
So eine (oder ähnliche Meldung) kommt auch, wenn beim Beenden nochmal eine Aktion mit nötigen Admin-Rechten versucht wird.

Klammer mal die 3 Aktionen beim Beenden einzeln aus (Speicherleck mal ignorierend), ob man da einen Schuldigen findet.

CoLT 6. Jul 2009 10:35

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
Ist die Benutzerkontensteuerung aktiviert ?

cmd -> msconfog -> tools -> "Benutzerkontensteuerung deaktivieren" -> Starten


Versuch mal ob es daran liegt.

CoLT

jaenicke 6. Jul 2009 10:45

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
Wobei da dann ganz wichtig ist, dass du nicht vergisst die wieder zu aktivieren.

Ja, eine der häufigsten Ursache ist, dass du versuchst eine Datei in das eigene Verzeichnis zu schreiben, wenn das Programm beendet wird. (Logdatei, Einstellungen, ...)

HeikoAdams 6. Jul 2009 10:55

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
Zitat:

Zitat von jaenicke
Ja, eine der häufigsten Ursache ist, dass du versuchst eine Datei in das eigene Verzeichnis zu schreiben, wenn das Programm beendet wird. (Logdatei, Einstellungen, ...)

Das kann ich ausschließen, da alle Dateien, auf die schreibend zugegriffen wird, unter c:\programdata liegen, worauf AFAIK alle Benutzer Schreibzugriff haben.

Zitat:

Zitat von Satty67
Klammer mal die 3 Aktionen beim Beenden einzeln aus (Speicherleck mal ignorierend), ob man da einen Schuldigen findet.

Ich habe testweise den kompletten Destroy-Event ausgeklammert - ohne Erfolg.

Zitat:

Zitat von CoLT
Ist die Benutzerkontensteuerung aktiviert ?

Werd ich mal testen.

MagicAndre1981 6. Jul 2009 12:33

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
hast du die Vista Manifest Einträge eingefügt? Sonst denkt die UAC du bist ne Altanwendung und schlägt dir einen Kompatibilitätsmodus vor.

HeikoAdams 6. Jul 2009 12:49

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
Zitat:

Zitat von MagicAndre1981
hast du die Vista Manifest Einträge eingefügt? Sonst denkt die UAC du bist ne Altanwendung und schlägt dir einen Kompatibilitätsmodus vor.

Also meine Manifest-Datei sieht so aus:
Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity name="RIF.SyncBack4U" processorArchitecture="x86" version="1.0.1.0" type="win32"/>
<description>Regenspurger SyncBack4U</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*" />
    </dependentAssembly>
</dependency>
</assembly>
Oder fehlt da noch etwas?

jaenicke 6. Jul 2009 12:51

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
Zitat:

Zitat von HeikoAdams
Das kann ich ausschließen, da alle Dateien, auf die schreibend zugegriffen wird, unter c:\programdata liegen, worauf AFAIK alle Benutzer Schreibzugriff haben.

Ab XP ja, bei Windows 2000 nein. Das hat sich da geändert.
Da meistens die zu schreibenden Daten (insbesondere Einstellungen) benutzerspezifisch sein dürften, sollte man auch den benutzerspezifischen Pfad wählen.

Hast du denn einmal unter Vista das Programm debuggt? Vielleicht siehst du dann ja schon woran es liegt.

Die andere Sache: Hast du einmal in der Projektdatei mit "ReportMemoryLeaksOnShutdown := True;" dafür gesorgt, dass diese angezeigt werden, also auch unter XP, wenn es sonst richtig läuft? Vielleicht äußert sich ein solcher Fehler nur unter Vista so drastisch.

HeikoAdams 6. Jul 2009 13:56

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
Ich habe zwar keinen blaßen Schimmer warum, aber das bloße Ändern von
Delphi-Quellcode:
begin
    Application.Initialize;
    Application.Title := 'SyncBack4U';
    Application.CreateForm(TdtmdlSyncBack, dtmdlSyncBack);
    Application.CreateForm(TFrmBackup, FrmBackup);
    Application.Run;
end.
in
Delphi-Quellcode:
begin
  try
    Application.Initialize;
    Application.Title := 'SyncBack4U';
    Application.CreateForm(TdtmdlSyncBack, dtmdlSyncBack);
    Application.CreateForm(TFrmBackup, FrmBackup);
    Application.Run;
  except
    on e:Exception do
      MessageBox(0, PChar(e.Message), 'Fehler', MB_OK + MB_ICONSTOP + MB_TOPMOST);
  end;
  ExitProcess(0);
end.
hat das Problem beseitigt. Es kommt aber merkwürdigeweise keine Exception-Meldung. :coder2: Soll mir aber auch egal sein, solange das Programm tut was es soll. :dp:

MagicAndre1981 6. Jul 2009 14:57

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
ja das fehlt noch was.

XML-Code:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
        <requestedPrivileges>
            <requestedExecutionLevel level="asInvoker" uiAccess="false"/>
        </requestedPrivileges>
    </security>
</trustInfo>
Das musst du hinter dem dependency Tag einfügen. Wenn du Adminrechte brauchst musst du das asInvoker in requireAdministrator ändern, dann kommt bei jedem Programmstart der UAC Prompt.

OldGrumpy 6. Jul 2009 15:49

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
Hast Du es mal im Debugger laufen lassen und einen Breakpoint auf den Except-Block gesetzt? Wenn das Main Window schon abgeräumt worden ist, wenn der Fehler auftritt, dann hört man bestenfalls noch den Fehlersound, sieht aber keine Ausgabe mehr.

Nighthawk1310 6. Jul 2009 17:24

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
Zitat:

Zitat von HeikoAdams
Delphi-Quellcode:
begin
  try
    Application.Initialize;
    Application.Title := 'SyncBack4U';
    Application.CreateForm(TdtmdlSyncBack, dtmdlSyncBack);
    Application.CreateForm(TFrmBackup, FrmBackup);
    Application.Run;
  except
    on e:Exception do
      MessageBox(0, PChar(e.Message), 'Fehler', MB_OK + MB_ICONSTOP + MB_TOPMOST);
  end;
  ExitProcess(0);
end.
hat das Problem beseitigt. Es kommt aber merkwürdigeweise keine Exception-Meldung. :coder2: Soll mir aber auch egal sein, solange das Programm tut was es soll. :dp:

Das Problem ist zu Deinem Leidwesen leider noch nicht beseitigt. Mit
Delphi-Quellcode:
 ExitProcess(0);
teilst du Windows beim beenden Deines Programmes nur mit, dass alles ok ist. Darum kommt keine Meldung mehr.

Apollonius 6. Jul 2009 17:28

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
Insbesondere beendet ExitProcess den Prozess, ohne dass die Finalization-Abschnitte der Units aufgerufen werden - dadurch dürfte auch das OnDestroy-Ereignis deiner Formulare unterdrückt werden.

Madtrax 8. Jul 2009 08:28

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
Hallo

Zitat:

Zitat von HeikoAdams
Das kann ich ausschließen, da alle Dateien, auf die schreibend zugegriffen wird, unter c:\programdata liegen, worauf AFAIK alle Benutzer Schreibzugriff haben.

Hallo

unter Vista ist c:\programdata nicht wirklich schreibberechtigt. Alle User können das Verzeichnis auslesen, aber schreiben NUR mit Adminrechten. Wenn du also beim Programmende hier was reinschreibst, dann könnte der Fehler durchaus daher kommen.

Bernhard Geyer 8. Jul 2009 08:41

Re: Vista behauptet mein Programm funktioniert nicht mehr
 
Zitat:

Zitat von Madtrax
unter Vista ist c:\programdata nicht wirklich schreibberechtigt. Alle User können das Verzeichnis auslesen, aber schreiben NUR mit Adminrechten.

Dann denke ich das das Problem auch bei W2K und NT auch auftritt wenn man nur als z.B. Gast oder User (Nicht Hauptbenutzer) arbeitet. Vor Vista haben viele User als Hauptbenutzer mit lokalen Adminrechten gearbeitet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz