114801
Goto Top

Portable App (PAF): wie Ordner aus Benutzerprofil in portable nutzbar machen?

Hallo,
inzwischen habe ich ein wenig herausgefunden wie Portable Apps (wie bei portableapps.com) erstellt werden können. Mit der Windows Registry klappt es soweit, nur habe ich ein Programm welches die Daten unter <Benutzer>\AppData\Roaming\<Nutzerdaten> ablegt, wie viele Programme es inzwischen zum größten Teil auch machen, nur was muss ich machen damit der Inhalt von <Nutzerdaten> in der Portable App verwendet werden kann ohne dass die portable Version weiterhin auf dem lokalen Ordner zugreift? Ich konnte leider nichts darüber finden bzw. wie es gemacht werden müsste face-sad

Vielen Dank im Voraus face-smile

Content-Key: 341245

Url: https://administrator.de/contentid/341245

Ausgedruckt am: 19.03.2024 um 07:03 Uhr

Mitglied: BassFishFox
BassFishFox 22.06.2017 aktualisiert um 01:54:49 Uhr
Goto Top
Hallo,

nur was muss ich machen damit der Inhalt von <Nutzerdaten> in der Portable App verwendet werden kann ohne dass die portable Version weiterhin auf dem lokalen Ordner zugreift?

Das wird wohl hart einkodiert sein, vermute ich. Der saubere Weg waere jetzt, die "Anwendung" so neu zu schreiben dass sie nichts in der Registry und nichts unter "<Benutzer>\AppData\Roaming\" hinterlaesst. Nur das wird wohl der Ersteller der Anwendung nicht wollen oder sich keine Gedanken darueber gemacht haben, wo sein Proggi Muell hinterlaesst.

Welche Anwendung ist es denn?

BFF
Mitglied: 114801
114801 22.06.2017 um 13:33:29 Uhr
Goto Top
Das ist eine Anwendung die ich gerne portable machen würde, keine eigene programmierte.

Ich habe als Beispielanwendung PDF Digisigner 4.0 genommen. Die Anwendung läuft auch, nur die Dateien werden halt lokal gespeichert, diese hätte ich, wie es zum Beispiel bei den Mozilla Programmen es auch der Fall ist, im portablen Ordner statt lokal.

Die Dateien werden unter %USERPROFILE%\.digiSigner gespeichert.
Mitglied: BassFishFox
BassFishFox 22.06.2017 aktualisiert um 14:19:32 Uhr
Goto Top
Hallo,

Digisigner...

Das gibt es doch schon portable.
Nimm Dir einfach mal eine bereits portable Version und schau nach wohin die ihre Daten schreibt.

Wenn es das portable Teil nicht als *.paf gibt, einfach umbauen. face-smile

BFF
Mitglied: 114801
114801 22.06.2017 aktualisiert um 15:04:56 Uhr
Goto Top
Ich habe geschaut, alle angeblichen "Portablen" schreiben auch nur ins Benutzerverzeichnis da es keine portablen sind, nur die Dateien die ich bereits auch im App Unter-Ordner reingetan hatte. Eine PAF konnte ich nicht finden.
Mitglied: BassFishFox
BassFishFox 22.06.2017 um 18:23:25 Uhr
Goto Top
Hallo,

Dann wird das halt leider so sein. Viele Anwendung ist halt nicht sauber portierbar.

Nebenbei gefragt, braucht Digisigner zufaellig ein installiertes JAVA? Hatte da eine tragbare Version gesehen, wo JAVA als Vorraussetzung stand.

Egal, ich denke das ein Tool wie von Cameyo Dir auch nicht helfen wurde. Dieses verpackt alles in eine EXE. Das Programm selbst duerfte dennoch dann in die Nutzerdateien schreiben.

Alternativ vielleicht die Idee, dass Du das Programm per Script startest und nach beenden des Programmes der lokale Ordner "/.digiSigner" geloescht wird.

BFF
Mitglied: 114801
114801 22.06.2017 aktualisiert um 20:44:43 Uhr
Goto Top
Naja, gibt inzwischen auch Programme die einen die Möglichkeit bieten ob lokal oder portable installiert werden soll face-smile

Digisigner braucht Java face-sad das wäre wohl eine Sache...

Nun ja, im Ordner %USERPROFILE%\.digiSigner werden auch Einstellungen gespeichert únd/oder andere Daten abgelegt.

Es muss doch eine Lösung geben...

Von WhatsApp für Windows welches nur einen zusammengebauten Browser beinhaltet, gibt es auch Dateien die man portabel machen könnte, leider landen die Einstellungen unter %APPDATA%\WhatsApp

Gibt wohl die normale Installation die sich mit den bereits gepackten Dateien unterscheidet. Die ich zuerst hatte enthält natürlich Java-Dateien, aber auch DigiSigner.exe die gepackte enthält andere Dateien ohne die DigiSigner.exe face-wink
Mitglied: BassFishFox
BassFishFox 22.06.2017 um 21:06:07 Uhr
Goto Top
Hallo,

Digisigner braucht Java das wäre wohl eine Sache...

Dachte ich mir es doch. Der Ordner mit dem Punkt am Anfang ist auch so ein Hinweis dafuer.

leider landen die Einstellungen unter %APPDATA%\WhatsApp

Egal wie rum, man koennte auch anders programmieren und den Ordner zum Schreiben variabel per ini oder reg festlegen. Macht halt kaum keiner mehr weil der Nutzerordner ist eh eine Muellhalde unter Windows. Schau mal unter C:\ProgramData ob Dein Programm da auch Spuren hinterlaesst.

Es muss doch eine Lösung geben...

Jein. Du kannst nicht alles voll portable machen. Eventuell die Anwendung virtualisieren, doch schreibt die Anwendung auch nach lokal vermutlich.

Ackere Dich mal hier Durch.
https://portableapps.com/manuals/PortableApps.comLauncher/ref/envsub.htm ...
Vielleicht gelingt es Dir ja, die Umgebungsvariablen zur Laufzeit des Programmes umzubiegen und auch eine portable JRE zu benutzen.

Die Idee, dass Du das Programm per Script startest und nach beenden des Programmes der lokale Ordner "/.digiSigner" geloescht wird erweitere dahin, dass der Script den lokalen Ordner auf den Stick kopiert und dann erst loescht und beim naechsten Start wieder nach lokal kopiert.

Mehr faellt mir auch nicht ein im Moment.

BFF
Mitglied: 114801
114801 22.06.2017 aktualisiert um 22:30:37 Uhr
Goto Top
Kurzfassung: naja, habe inzwischen viel versucht und wenn es so Programmiert wurde dass einfach keine PAF erstellt werden kann, dann muss man wohl die unsaubere Variante bauen, also Script kopiert die Daten dort in der "Müllhalde" Programm schreibt den Müll da rein, beim beenden wird der Müll aus der Müllhalde in die nachgemachte portable zurück kopiert...

Man könnte bestimmt die Java-Dateien dekompilieren, aber wäre die Frage wo der Eintrag zu finden wäre und wie das alles sauber kompiliert wird...

Wie müsste das Script eigentlich sein?
  • Ordner in Müllhalde kopieren, kein Problem
  • Programm ausführen, kein Problem
  • Prüfen ob Programm noch läuft, momentan ein Problem
  • Wenn Programm beendet wird, Dateimüll aus der "Müllhalde" zurück kopieren

Eventuell könnte man sich ein 0815-Progrämchen auch mit C# basteln face-big-smile wobei der Ziel-PC .NET Framework ja haben muss, und für Digisigner müsste erst gecheckt werden ob Java installiert ist, bei WhatsApp Browser-Anwendung könnte man sich zur not auch noch so einen billigen "Starter" bauen. Leider habe ich in Sachen C++ und Co, keinen wirklichen Plan, dann eher mit C#, mit Visual Basic komme ich mit dem Code nicht mehr klar face-big-smile face-wink
Mitglied: BassFishFox
BassFishFox 22.06.2017 um 23:18:05 Uhr
Goto Top
Hallo,

Wie es mittels batch geht ein laufendes Programm zu finden steht hier.

Mit Batchdatei Prüfen ob Programm ausgeführt wird

Meinereiner wuerde allerdings das gute AutoIT ausbuddeln und damit werkeln. face-wink

BFF
Mitglied: rubberman
rubberman 23.06.2017 um 00:16:14 Uhr
Goto Top
Um es gleich vorab zu sagen, ich hab nicht die geringste Ahnung was Digisigner ist oder macht ...

Wenn Daten im Benutzerprofil abgelegt werden, ist doch die Frage wie das Programm an die Pfade kommt. Sehr einfache Möglichkeit wäre bspw. sie aus dem Environment zu lesen. Code::Blocks macht das bspw., was ich mir zunutze gemacht habe um das Ding portable hinzubekommen.
(obsolet) CodeBlocks Portable mit MinGW 32 und 64 Bit unter Windows
Dort habe ich ein VBScript als Launcher geschrieben. Vor dem Aufruf des Programms ändere ich das Environment des Scriptprozesses, welches dann an das aufgerufene Programm vererbt wird.
Ich könnte mir vorstellen, dass das Ganze ebenso gut mit einem simplen Batchscript funktioniert, à la
@echo off &setlocal
2>nul md "%~dp0dummy_user\AppData\Roaming"  

set "USERPROFILE=%~dp0dummy_user"  
set "APPDATA=%~dp0dummy_user\AppData\Roaming"  

start "" "Digisigner.exe"  
Falls das so klappt, bist du schon einen Schritt weiter. Kann auch sein du musst noch weitere variablen anpassen (führe SET in einem cmd Prompt aus um zu sehen, welche infrage kämen) oder dass die Daten aus der Registry gelesen werden. Ebenso musst du in die geschriebenen Daten hineinschauen. Werden dort bspw. absolute Pfade geschrieben, musst du auch diese noch vor dem Start des Programms ändern.

Grüße
rubberman
Mitglied: 114801
114801 23.06.2017 aktualisiert um 01:11:50 Uhr
Goto Top
Danke für die Hilfe face-smile

Mit Digisigner können PDF-Dokumente auch digital unterschrieben werden face-wink auch wenn das Programm etwas in die Jahre gekommen ist, dafür ist es kostenlos face-smile

ich habe zwar die Batch angepasst, aber Digisigner speichert dennoch die Daten dort ab wo die nicht hin sollen, hier mal die angepasste Version face-wink

Digisigner legt nicht nur die Dateien digiSigner.properties, pdfviewerfontcache.properties, pdfviewerri.properties an, sondern auch Dateien mit zufälligen Namen...

@echo off &setlocal
2>nul md "%~dp0dummy_user\.digiSigner"  
set "USERPROFILE=%~dp0dummy_user\.digiSigner"  
set "HOMEPATH=%~dp0dummy_user\.digiSigner"  
echo. && echo USERPROFILE: %USERPROFILE% && echo. && echo HOMEPATH: %HOMEPATH% && echo. && echo dummy_user: %~dp0dummy_user && echo.
start "" "DigiSigner.exe"  
pause
Die Batch legt im Ordner dummy_user folgendes an: .digiSigner\AppData\Local es landen keine Dateien dort hinein, sondern wie erwähnt im lokalen Ordner face-sad

Leider weiß ich nicht wie Digisigner den Pfad für die Daten abfragt und jedes mal der lokale Ordner samt Dateien erstellt wird... In die Windows Registry legt das Programm jedenfalls nicht an, sonst wäre die Sache etwas einfacher wenn dort nur die Einstellungen gespeichert werden würden face-wink
Mitglied: rubberman
rubberman 23.06.2017 um 01:44:32 Uhr
Goto Top
.digiSigner legt das Programm an. Das gehört in keine der Variablen.
@echo off &setlocal
2>nul md "%~dp0dummy_user\AppData\Roaming"  

set "USERNAME=dummy_user"  
set "USERPROFILE=%~dp0dummy_user"  
set "APPDATA=%~dp0dummy_user\AppData\Roaming"  
set "HOMEDRIVE=%~d0"  
set "HOMEPATH=%~p0dummy_user"  


start "" "Digisigner.exe"  

In die Windows Registry legt das Programm jedenfalls nicht an
Das meinte ich auch nicht. Schau bspw. mal unter
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Ebenso könnte auch die Windows API genutzt werden um die Pfade zu ermitteln. Wer weiß ...

Grüße
rubberman
Mitglied: BassFishFox
BassFishFox 23.06.2017 aktualisiert um 02:06:24 Uhr
Goto Top
Halloele,

Nur so eine Idee.

DigiSigner ist ja abhaengig von einer installierten JRE. Kann es sein, dass das Schreiben der Werte durch die JRE gemacht wird und DigiSigner nur den Pfad .digisigner und die Dateinamen liefert? Und da ja die JRE eigene Ungebungsvariablen verwendet kriegt sie nix mit von den temporaeren Einstellungen der Batch?


BFF
Mitglied: rubberman
rubberman 23.06.2017 um 02:19:04 Uhr
Goto Top
Ich weiß nicht wie ein Executable funktioniert, dass abhängig von Java ist (hab Java nicht mal installiert und es auch nicht vor). Läuft die Runtime bereits vorher, oder wird sie erst durch das Executabe angeschoben? Letzteres würde IMHO bedeuten, dass auch hier das geänderte Environment weiter vererbt wird.

Grüße
rubberman
Mitglied: BassFishFox
BassFishFox 23.06.2017 aktualisiert um 03:12:01 Uhr
Goto Top
Wenn ich das wuesste hatte ich es gesagt. Mir kam das in Erinnerung, weil wir vor Jahren mal massiv Probleme mit Umgebungsvariablen bei einem Programm hatten. Wir mussten da einige Anpassungen in der Datei deployment.properties machen. Nachdem dieses Programm ComputerGottLob rausflog aus unserer Welt, fahren wir komplett ohne JAVA.

Was ich denke bei dem Programm des TO ist.

Programm sagt z.B. nur Schreibe irgendwas in die Datei digiSigner.properties. Diese Datei ist im Verzeichnis .digisigner.

Wenn nun die JRE temporaere Aenderung der Umgebungsvariablen nicht beruecksichtig, kommt genau dazu, was dem TO passiert ist.
Vermutlich muesste man das zu benutzende Verzeichnis eher in die deployment.properties schreiben und dann erst das Programm/JRE ausfuehren.

@114801
Wenn Du dieses digisigner unbedingt portable haben willst, brauchst Du auch eine portable JRE. Ob digisigner allerdings mit solch einer JRE zusammenarbeitet musst Du selbst herausfinden. Wie man das einstellt ist weiter oben schon per Link zu finden. Vermutlich ist das sogar einfacher zu erledigen, wie auf ein lokal installiertes JRE zu hoffen, dessen Speicherort zu verbiegen, vorher den Laufwerksbuchstaben des Sticks zu ermittlen usw.

Achja, kennst Du das schon? http://portablesigner.sourceforge.net/
Das ist keine exe sondern ein Javabinary. Gestertet mittels portabler JRE, vielleicht ne Idee?

BFF
Mitglied: 114801
114801 23.06.2017 aktualisiert um 17:44:33 Uhr
Goto Top
Bei Java scheint dass ja immer so eine Sache zu sein und leider kenne ich mich damit eigentlich gar nicht aus, Apps für Android nutzen ja ebenfalls Java, aber darum geht es jetzt ja hier nicht face-big-smile

Wäre zu schön gewesen wenn man Digisigner portabel hätte machen können und so...

Um PortableSigner (von 2013) nutzen zu können muss man sich mit JCE Policy rumschlagen...

Bin noch über JSignPdf (von 2014) gestolpert (jsignpdf.sf.net), aber anscheinend haben wohl alle keine Funktion dass die Signierzeit vom Zeitserver geholt wird...