114801
21.06.2017
2724
16
0
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
Vielen Dank im Voraus
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
Vielen Dank im Voraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 341245
Url: https://administrator.de/contentid/341245
Ausgedruckt am: 19.03.2024 um 07:03 Uhr
16 Kommentare
Neuester Kommentar
Hallo,
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
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
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
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
Hallo,
Dachte ich mir es doch. Der Ordner mit dem Punkt am Anfang ist auch so ein Hinweis dafuer.
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.
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
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
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.
BFF
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.
BFF
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
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
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"
Grüße
rubberman
.digiSigner legt das Programm an. Das gehört in keine der Variablen.
Ebenso könnte auch die Windows API genutzt werden um die Pfade zu ermitteln. Wer weiß ...
Grüße
rubberman
@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 unterHKEY_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
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
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
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
Grüße
rubberman
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
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