Gelöst DeploymentAction der Erweiterungen

akabelitz

Administrator
Teammitglied
Hallo,
bei Erweiterungen gibt es bei den DeploymentAction die Option "2 = Exe-Datei ausführen".
Hat die schon mal jemand erfolgreich verwenden können?
Bisher ist es völlig egal was für eine Exe-Datei ich verwende, sie wird nicht ausgeführt.
Ursprünglich wollte ich ein selbstextrahierendes Archiv ausführen (ohne Oberfläche, komplett silent), aber das wird ignoriert.
Eine Konsolenanwendung wird auch nich ausgeführt...

Wie muss so eine Exe-Daei aussehen, dass sie ausgeführt wird?
 
Selbst extrahierende Exe-Dateien funktionieren leider nicht, da das Betriebssystem die Ausführung stoppt. Ich habe mir den Fall bereits näher angesehen und keine Lösung gefunden. Der Prozess bleibt hängen. Selbst erstellt Programme funktionieren dagegen. Es bleit nur die Möglichkeit alle Dateien einzeln aufzunehmen oder eine eigene Exe zum Entpacken zu schreiben. Hier ein kleines Beispiel, bei dem allerdings das Löschen von bereits vorhandenen Dateien nicht enthalten ist:

using System;
using System.IO;
using System.IO.Compression;
using System.Reflection;

namespace MMSelfExtracting
{
internal static class Program
{
[STAThread]
private static void Main()
{
var currentDir = new FileInfo(Assembly.GetExecutingAssembly().Location).DirectoryName;
if (currentDir == null) return;
var zipFileName = Path.Combine(currentDir, $"{Guid.NewGuid()}.zip");
if (File.Exists(zipFileName)) File.Delete(zipFileName);
File.WriteAllBytes(zipFileName, Properties.Resources.MMIcons);
ZipFile.ExtractToDirectory(zipFileName, currentDir);
if (File.Exists(zipFileName)) File.Delete(zipFileName);
}
}
}

Das Zip-File habe ich in die Ressourcen der Anwendung gesteckt. Als Basis habe ich eine WinForms-Anwendung mit .Net Framework 4.8 verwendet, aus der ich WinForms und alle unnötigen Verweise bis auf folgende entfernt habe:
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.IO.Compression.FileSystem" />
 
Hallo Herr Müller,

vielen Dank für das Beispiel. Ich habe es mit einer Konsolenanwendung umgesetzt, die hat auch funktioniert.
Das Ausrollen des ZIP-Archives lasse ich vom App-Designer machen und im Anschluss kommt meine "Entpacker-Exe".

Das Überschreiben habe ich über eine Schleife geregelt, denn die Option ist nur im Framework vorhanden wenn man einzeln entpackt....

Code:
using System.IO;
using System.IO.Compression;

            using (ZipArchive archive = ZipFile.OpenRead(zipPath))
            {
                foreach (ZipArchiveEntry entry in archive.Entries)
                {
                    string completeFileName = Path.Combine(extractPath, entry.FullName);
                    string directory = Path.GetDirectoryName(completeFileName);
                    if (!Directory.Exists(directory))
                    {
                        Directory.CreateDirectory(directory);
                    }
                    entry.ExtractToFile(completeFileName, true);
                }
            }
 
So nebenbei, die Möglichkeit mit der Zip Datei löst das Problem mit dem Verteilen von Textdateien.
Die Textfiles in eine Zipdatei rein und diese über den AppDesigner verteilen und über die (noch) eigene Anwendung entpacken.
 
Wenn man das erste mal eine Textdatei ausrollt ist alles gut.
Ändert man die Textdatei bzw. man entfernt eine Zeile, exportiert die Metadaten neu, findet beim erneuten ausrollen ein Merge der Dateien statt.
Bedeutet die Änderungen sind drin, die gelöschte Zeile aber auch noch.

Das ist aber eigentlich auch bekannt und wurde am 8.10.2021 im Webcasts Developer Update vom Professional Service gezeigt.
 
Das Problem ist im nächsten Hotfix behoben. Ich hatte explizit nach Textdateien gefragt, da das o.g. Problem nicht nur Text- sondern alle Dateien betroffen hat, wenn die neue Datei kleiner als die vorhandene ist.
 
Ich kannte es bisher nur bei Textdateien und wie gesagt, mit dem Zip konnte ich einen Workaround schaffen
 
Zurück
Oben