Jump to content


This is a ready-only archive of the InstallSite Forum. You cannot post any new content here. / Dies ist ein Archiv des InstallSite Forums. Hier können keine neuen Beiträge veröffentlicht werden.
Photo

Löschen von Dateien


13 replies to this topic

JuergenW

JuergenW
  • Members
  • 10 posts

Posted 30 December 2005 - 13:16

Ich benutze ein IS Basic-MSI Projekt. Ich habe eine Abfrage (Dialog) erstellt, in der der Anwender bei der Deinstallation entscheiden soll, ob bestimmte bestimmte Profildaten gelöscht werden sollen oder nicht. Wie kann ich das machen ohne eine zusätzliche DLL oder ein Script zu schreiben?

Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 01 January 2006 - 17:24

Ohne Custom Action geht das nicht.

JuergenW

JuergenW
  • Members
  • 10 posts

Posted 02 January 2006 - 09:18

Hallo. Klar das ich eine CA dafür benötige, aber wie? Was kann ich machen? Löschen von files über deletfile ok, aber ich möchte diese Dateien ja Benutzerabhängig löschen, d.h. nur wenn der Benutzer im Dialog angiebt, dass er diese Daten auch wirklich löschen will sollen diese gelöscht werden.


Stefan Krueger

Stefan Krueger

    InstallSite.org

  • Administrators
  • 13,269 posts

Posted 08 January 2006 - 12:56

Wenn du über die DeleteFile Tabelle gehen willst, kannst du z.B. die entsprechenden Einträge dynmamisch anlegen. Oder du schreibst einfach ein Skript oder eine DLL die die Dateien löscht. Ausgeführt wird das ganze in Abhängigkeit vom Wert des Properties, das im Auswahldialog gesetzt wird.

JuergenW

JuergenW
  • Members
  • 10 posts

Posted 09 January 2006 - 11:11

Hallo Stefan,
Entschuldige bitte wenn ich mich zu blöde anstelle, aber wie kann ich in der RemoveFile Tabelle einen Eintrag "dynamisch" erstellen?

Guest_Tino Teuber

Guest_Tino Teuber
  • Guests

Posted 09 January 2006 - 11:45

QUOTE
aber wie kann ich in der RemoveFile Tabelle einen Eintrag "dynamisch" erstellen?

Das Feld FileName der Tabelle RemoveFile ist vom Type WildCardFilename . Das bedeutet, dass Du hier mit Hilfe von "*" und "?" mehrere Dateinen zusammenfassen kannst.

Gruß
Tino

Edited by Tino Teuber, 09 January 2006 - 11:46.


JuergenW

JuergenW
  • Members
  • 10 posts

Posted 09 January 2006 - 12:00

Hallo Tino,
ich brauche aber keine Wildcards, da ich die Namen der Files weiss, was ich brauche, ist ein Auswahlkriterium, ob diese Files gelöscht werden sollen oder nicht.

ANo

ANo
  • Full Members
  • 179 posts

Posted 09 January 2006 - 16:08

Hallo, so einfach ist das nicht, oder?

Ich mache auch so etwas:

Der Benutzer wird gefragt, ob die Einstellungen überschrieben werden können.
Dabei wird PROPERTY_X gesetzt (ja = 1, nein = 0").

Dann gibt es eine CustomAction A_Delete_Settings in der Ausführungssequenz, nach InstallInitialize, Bedingung: NOT Installed.

Diese CA ruft eine Funktion F_Delete_Settings auf.
In der Funktion schreibe ich mit IS-Script etwa ungefähr so:

0.
Wenn PROPERTY_X=1 ist, dann:

1.
sSQL = "DELETE FROM `RemoveFile` WHERE `FileKey`='FileKeyX'";
+ Script zum Ausführen der SQL-Anweisung

2.
sSQLBase = "INSERT INTO `RemoveFile` (%s) VALUES (%s) TEMPORARY";

sColumnBase = "`RemoveFile`.`FileKey`, `RemoveFile`.`Component_`,
`RemoveFile`.`FileName`,";
sColumnBase = sColumnBase + " `RemoveFile`.`DirProperty`,
`RemoveFile`.`InstallMode`";

sValue = "'FileKeyX', 'ComponentX', 'SettingX.set', 'MY_FOLDER_X', 1";

Sprintf (sSQL, sSQLBase, sColumnBase, sValue);
+ Script zum Ausführen der SQL-Anweisung

Damit liegen die Einträge in der Tabelle RemoveFile vor und wenn die ComponentX
installiert wird, wird eine vorhandene SettingX.set gelöscht

Vielleicht mache ichs zu umständlich, aber funktioniert.

MfG
André

Guest_Tino Teuber

Guest_Tino Teuber
  • Guests

Posted 09 January 2006 - 18:34

Hallo!

QUOTE
ich brauche aber keine Wildcards, da ich die Namen der Files weiss,

Du hast gefragt, wie man "dynamisch" einen Eintrag in die Tabelle RemoveFile einfügt. Da ich nicht weiß was du genau mit "dynamisch" meinst konnte ich nur raten und habe Dir den Hinweis mit den Wildcards gegeben.

QUOTE
was ich brauche, ist ein Auswahlkriterium, ob diese Files gelöscht werden sollen oder nicht.

Die Datensätze in der Tabelle RemoveFile sind durch die Spalte Component_ an eine Komponente gebunden. Die Komponenten Tabelle hat wiederum die Spalte Condition mit deren Hilfe du festlegen kannst ob die Dateien gelöscht werden sollen oder nicht.

Gruß
Tino

JuergenW

JuergenW
  • Members
  • 10 posts

Posted 10 January 2006 - 11:59

Hallo ANo,
Danke für Deinen Hinweis. Mitlerweile glaube ich auch, das es nur über ein InstallScript oder aufrufen einer DLL geht. Hatte gehofft, dass es mal anders geht.

Nochmals Danke, werde mich ans schreiben eines InstallScriptes machen.
Hier noch eine Frage: Wenn ich das Script benutze, muss ich irgendwas zusätzlich mit ausliefern, damit das Setup läuft? Was wird zur Ausführung des Setups auf dem Zielsystem benötigt?

Danke

JuergenW

JuergenW
  • Members
  • 10 posts

Posted 10 January 2006 - 12:07

Hallo Tino,
ich wollte nicht unhöflch sein oder so rüberkommen. Danke für Deine Hilfe.
Aber was ich brauche ist :

Es sollte während der Deinstallation vom Anwender entschieden werden (ein J/N Dialog in der Sequence --> Wert wird in eine Globale Property geschrieben), ob bestimmte Dateien (Profildaten) gelöscht werden sollen oder auf dem System verbleiben sollen. Dies kann ich nicht über Wildcards oder über die Komponenten Tabelle (oder doch??) machen, da ich nicht weiss was der Anwender machen will.

Danke


ANo

ANo
  • Full Members
  • 179 posts

Posted 11 January 2006 - 09:51

Ich benutze InstallShieldX Prof., BasicMsi-Project mit InstallShieldScript.
Wenn ich ein Script einfüge, wird automatisch die ScriptEngine eingefügt, die dann auch installiert wird.

Die Setup.rul ist von InstallShield vorbereitet.

Hier füge ich die Funktion ein:

export prototype F_Settings_Delete(HWND);

function F_Settings_Delete(hInstall)
begin
// Code ...
end;

Dann gibt es eine CA A_Settings_Delete, diese benutzt die Funktion F_Settings_Delete.

MfG
ANo



JuergenW

JuergenW
  • Members
  • 10 posts

Posted 11 January 2006 - 10:05

Hallo ANo.
Ich benutze IS11 Basic MSI-Projekt. Hatte gehofft ohne Script auszukommen, geht aber wohl nicht. Durch die 10 Zeilen Script Code muss die IS Engine mit installiert werden. Diese ist 1 MB gross. So wird mein Setup auf einen Schlag fast doppelt so gross wie vorher. Naja so ist das Leben.
Vielen Dank nochmal für Deine Hilfe.

gruss aus B.
Jürgen

(Ich weiss das die Engine auch aus dem Netz geladen werden kann, aber nicht jeder Anwender ist während der Installation am Netz.)

Guest_Tino Teuber

Guest_Tino Teuber
  • Guests

Posted 12 January 2006 - 13:53

Hallo Jürgen,

keine Angst, du kammst nich unhöflich rüber. ;-)

Ich habe Dein Problem gestern Abend versucht lokal bei mir zu testen. Ich habe eine simple MSI Datei erstellt die eine Textdatei installiert UND bei der Deinstallation zusätzlich das Verzeichnis "profil" im Programmverzeichnis mit samt den Dateien (welche NACH der Installation von mir MANUELL erstellt wurden) löscht. Das ganze hat bei mir ohne Probleme funktioniert. Wie das funktionert habe ich ja bereits oben geschrieben.

Das Löschen des "profil" Verzeichnis und der Dateien müsstest Du am besten mit einer extra neuen Komponente verbinden damit du dann dort das Condition Feld benutzen kannst. In diesem Condition Feld prüfst du dann das Property (Dialog: Profilordner löschen: Ja/Nein?) ab.

Gruß
Tino

Edited by Tino Teuber, 07 February 2006 - 15:04.