OpenOffice-Benutzerverzeichnis automatisiert umbenennen

Diskussionen zu Projekten

Moderator: Moderatoren

Forumsregeln
Dieses Unterforum versteht sich als Plattform zur Diskussion/Bearbeitung komplexerer Anfragen bzw. konkret verabredeter Projekte. Das können Dinge sein wie eine komplexere Calc-Datei oder auch die gemeinsame Programmierung eines größeren Makros, wichtig ist immer die Absicht ein Thema über längere Zeit (z.B. 3 Monate) fortlaufend zu besprechen.
Stephan
********
Beiträge: 11005
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

OpenOffice-Benutzerverzeichnis automatisiert umbenennen

Beitrag von Stephan » Di, 24.03.2015 12:39

Ich könnte Hilfe gebrauchen bei der Programmierung eines kleinen Tools für Linux/Unix/MacOS gebrauchen (im Folgenden erläutert)


Hallo,

wegen der Schwierigkeiten die Benutzer regelmäßig haben wenn sie ihr OpenOffice-Benutzerverzeichnis per Hand umbenennen müssen habe ich hier einmal versucht ein kleines Tool zu implementieren das das automatisiert erledigt.

Der derzeitige Stand ist die unten angehängte Datei "OO-Benutzerverzeichnis_umbenennen_1.0.0.odt", welche bei mir unter OOo und AOO (getestet OOo 3.3.0 und AOO 4.1.1) schon ganz ordentlich funktioniert, aber momentan eben nur unter MS Windows.
Wahrscheinlich funktioniert die Datei auch bereits unter LibreOffice Und MS Windows, ich habe das aber bisher noch nicht getestet.

Wegen der technischen Notwendigkeit das das OO-Benutzerverzeichnis nur umbenannt werden kann wenn OpenOffice nicht läuft besteht meine Lösung aus einer odt-Datei mit Makro PLUS ein kleines Programm (OO-BV.exe) das im Archiv der odt-Datei eingebettet ist.

Das Makro übernimmt die Initialisierung und startet danach OO-BV.exe, welche ihrerseits OpenOffice komplett beendet und das aktuielle OO-Benutzerverzeichnis umbenennt.

OO-BV.exe habe ich der Einfachheit halber mit AutoIT (http://de.wikipedia.org/wiki/AutoIt) erstellt, der derzeitige Quellcode steht weiter unten.

Es wäre nun nötig ein ähnliches Programm, Script etc. wie OO-BV.exe zu Programmieren, welches (standalone) unter Linux bzw. Unix bzw. MacOS läuft.
Wer kann und möchte mir dabei helfen?


Kontaktaufnahme bitte per PM oder auch direkt hier im Thread.

Das Ganze ist meinerseits ohne kommerzielles Interesse. Das Projekt steht meinerseits derzeitig unter ISC-Lizenz (http://de.wikipedia.org/wiki/ISC-Lizenz).


Gruß
Stephan


Quell-Code von OO-BV.exe:

Code: Alles auswählen

;ACHTUNG AutoIT-Quellcode
;Stand: 21.03.2015


#include <GUIConstantsEx.au3>
Global $ExitID

If $CmdLine[0] <> 2 Then help()

;-->etwas warten bevor soffice.bin beendet wird-------------------------
;um die Zeit zu überbrücken statt Sleep() Fortschrittsanzeige laufen lassen
ProgressOn("Bitte etwas Geduld", "Benutzerverzeichnis wird konsolidiert...")
For $i = 10 To 100 Step 10
	Sleep(300)
	$j = Random(0, 9, 1)
	$k = $i+$j
	If $k > 100 Then $k = 100 ;max. 100% möglich
	ProgressSet($k, $k & " %")
Next
Sleep(200)
ProgressOff()
;-------------------------etwas warten bevor soffice.bin beendet wird<--

;evtl. mehrere Instanzen vorhanden
;(jedoch Problem weil im Star-Basic-Makro nur die jeweilige Instanz angesprochen
;wird aus der heraus das Makro läuft, womit nicht das Vorhandensein ungespeicherter
;Dokumente in anderen Instanzen geprüft wird)
While ProcessExists("soffice.bin") ;
	ProcessClose("soffice.bin")
Wend

Sleep(500)

DirMove($CmdLine[1], $CmdLine[2])

Opt("GUIOnEventMode", 1)

_Main()

Func _Main()
	Local $YesID, $NoID

	GUICreate("OO-Benutzerverzeichnis wurde umbenannt", 600, 150)

	$tmp_text1 = "Das bisherige OpenOffice-Benutzerverzeichnis wurde umbenannt in:"
	$tmp_text2 = "Bitte starten Sie OpenOffice jetzt neu, dabei wird automatisch ein neues Benutzerverzeichnis erstellt."

	$tmp_var1 = "    " & CHR(34) & $CmdLine[2] & CHR(34)

	GUICtrlCreateLabel($tmp_text1 & CHR(13) & CHR(13) & $tmp_var1 & CHR(13) & CHR(13) & $tmp_text2, 10, 10, 580, 100, 0x0000)
	$YesID = GUICtrlCreateButton("OK", 275, 120, 50, 20)
	GUICtrlSetOnEvent($YesID, "OnOK")

	GUISetOnEvent($GUI_EVENT_CLOSE, "OnExit")

	GUISetState() ; display the GUI

	While 1
		Sleep(1000)
	WEnd
EndFunc   ;==>_Main

Func OnOK()
	Exit
EndFunc

Func OnExit()
	Exit
EndFunc

Func help()
    $msg = "OO-BV ist ein Tool zum Umbenennen des OpenOffice-Benutzerverzeichnisses." & @CR & _
            @CR & "Syntax:" & _
            @CR & "OO-BV.exe <Pfad des aktuellen OO-Benutzerverzeichnisses> <neuer Name des Verzeichnisses (Archiv)>" & @CR & _
            @CR & "Lizenz: ISC-Lizenz" & @CR & _
			"Copyright (c) Jörg Schmidt, www.jm-schmidt.de"
    MsgBox(0, "Hinweis zu OO-BV", $msg)
    Exit
EndFunc  ;==>help
Dateianhänge
OO-Benutzerverzeichnis_umbenennen_1.0.0.odt
(378.9 KiB) 415-mal heruntergeladen

Stephan
********
Beiträge: 11005
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: OpenOffice Benutzerverzeichnis automatisiert umbenennen

Beitrag von Stephan » Fr, 02.03.2018 08:54

Stand am 03.03.2018:
Die Dateiversion "OO-Benutzerverzeichnis_umbenennen_1.0.0.odt" entspricht auch weiterhin der aktuellen Version. Trotz >200 Downloads gab es bisher keine Fehlerrückmeldungen.

Versionen des Makros für Linux und MacOS gibt es weiterhin nicht, weil sich niemand gemeldet hat mich diesbezüglich zu unterstützen und mir dazu die Kenntnisse fehlen.


Gruß
Stephan

Gast Peter

Re: OpenOffice-Benutzerverzeichnis automatisiert umbenennen

Beitrag von Gast Peter » Mo, 20.05.2019 18:46

Guten Tag Stephan.
Da Linux ein anderes Sicherheitskonzept als Windows hat, ist es dort nicht einfach so möglich Dateien automatisch zu starten.
Sie müssen zunächst ausführbar gemacht werden. So, wie Du das per Makro in Windows gelöst hast (Datei auspacken und aufrufen) geht das in Linux meines Wissens nicht. Vielleicht hat sich deshalb noch niemand gemeldet.

Ich würde auch eine von OpenOffice unabhängige Lösung wählen, da eine ODF Datei nicht geöffnet werden kann, sollte OO richtig eingefroren sein. Eine unabhängigen Datei kann dann immer noch gestartet werden und OO in der Regel auch noch beenden.

Mein Vorschlag für Linux:

Code: Alles auswählen

#!/bin/bash

##############################################################################################################
# 
# Mit diesem Script kann das OpenOffice Benutzerverzeichnis oder die Datei Registrymodifications.xcu
# umbenannt werden. Sicherheitshalber wird vorher eine Kopie angelegt. Wird das Umbenennen erneut
# durchgeführt, wird diese Kopie überschrieben. Daher ist es auch möglich, vorher eine Sicherheitskopie
# eines "gut funktionierenden" Benutzerverzeichnisses zu erstellen, die bei Bedarf zurückgespielt werden kann.
#
# Das Script muss zunächst ausführbar gemacht werden. Dazu mit der rechten Maustaste auf die Datei klicken
# und die "Dateieigenschaften" aufrufen. Dort auf dem Registerblatt "Zugriffsrechte" ankreuzen, dass die Datei
# als Programm ausgeführt werden darf.
# 
# Danach kann das Script mit Doppelklick auf den Dateinamen gestartet werden. Es öffnet sich ein
# Dialogfenster, in dem "Im Terminal ausführen" ausgewählt werden muss.
# 
##############################################################################################################

_temp="/tmp/ooanswer.$$"
OOreg_path=~/.openoffice/4/user
OOuser_path=~/.openoffice/4/

### Registrymodifications.xcu umbenennen ###
rename_registry() {
		# OpenOffice beenden falls es noch läuft oder festhängt
		pkill soffice
		sleep 2

		# Datei umbenennen
		rm -r ~/.openoffice/4/user/registrymodifications.xcu_alt
		mv ~/.openoffice/4/user/registrymodifications.xcu ~/.openoffice/4/user/registrymodifications.xcu_alt

		# Meldung ausgeben
		dialog --no-lines --colors --msgbox " \n Die Datei registrymodifications.xcu wurde in  \n \Z1registrymodifications.xcu_alt\Zn umbenannt. \n Sie befindet sich in folgendem Verzeichnis:\n\n $OOreg_path \n\n OpenOffice kann jetzt neu gestartet werden." 12 50
}

### Benutzerverzeichnis umbenennen
rename_user() {
		pkill soffice
		sleep 2
		rm -r ~/.openoffice/4/user_alt
		mv -f ~/.openoffice/4/user ~/.openoffice/4/user_alt
		dialog --no-lines --colors --msgbox " \n Das OpenOffice Benutzerverzeichnis wurde in \Z1 USER_ALT \Zn umbenannt.\n Es befindet sich in folgendem Verzeichnis:\n\n $OOuser_path \n\n OpenOffice kann jetzt neu gestartet werden." 12 70
}

### Benutzerverzeichnis sichern
safe_user() {
    	pkill soffice
		sleep 2
		rm -r ~/.openoffice/4/user_sik
		cp -a -r ~/.openoffice/4/user ~/.openoffice/4/user_sik
		dialog --no-lines --colors --msgbox " \n Das OpenOffice Benutzerverzeichnis wurde in \Z1 USER_SIK \Zn umbenannt.\n Es befindet sich in folgendem Verzeichnis:\n\n $OOuser_path \n\n OpenOffice kann jetzt neu gestartet werden." 12 70
}

### Benutzerverzeichnis wiederherstellen
restore_user() {
    	pkill soffice
		sleep 2
		rm -r ~/.openoffice/4/user
		cp -a -r ~/.openoffice/4/user_sik ~/.openoffice/4/user		
		dialog --no-lines --colors --msgbox " \n Das OpenOffice Benutzerverzeichnis wurde aus der Sicherung \n $OOuser_path wieder hergestellt \n\n OpenOffice kann jetzt neu gestartet werden." 12 70
}

### Hauptmenü
main_menu() {
    dialog --no-lines --title " OpenOffice Benutzereinstellungen zurücksetzen"\
        --cancel-label "Abbrechen" \
        --menu "\nVor dem Zurücksetzen der Einstellungen wird jeweils eine Sicherungskopie des Ist-Zustandes der Dateien angelegt.\n\nEs ist auch möglich nur eine Sicherungskopie eines gut funktionierenden Benutzerverzeichnisses anzulegen. Bei Bedarf kann diese Sicherung zurückkopiert werden \n\nMit Maus, Richtungstasten oder Anfangsbuchstaben auswählen:\n " 20 64 10\
        Registry "sichern und Einstellungen zurücksetzen"\
        Benutzerverzeichnis "sichern und neu erstellen"\
        Sicherungskopie "ohne Zurücksetzen der Einstellungen"\
        Zurückkopieren "einer Sicherungskopie"\
        2>$_temp
        
    opt=${?}
    if [ $opt != 0 ]; then rm $_temp; exit; fi
    menuitem=`cat $_temp`
    case $menuitem in
        Registry) rename_registry;;
        Benutzerverzeichnis) rename_user;;
        Sicherungskopie) safe_user;;
        Zurückkopieren) restore_user;;
		Quit) exit;;
    esac
}

  main_menu
  rm $_temp
done
Hier kann ein Zip mit dem fertigen Script runtergeladen werden:
http://www.imagenetz.de/fe93333ae/OO_Be ... x.zip.html

Außer der Scriptdatei (renew_oouser.sh) ist auch eine fast automatisch startende Version enthalten (renew_oouser.sh.x).
Diese muss nur ausführbar gemacht werden, danach startet sie per Doppelklick ohne weitere Nachfrage.

Ich kann nicht testen, ob die sh.x auch auf 32bit Systemen funktioniert. Erstellt habe ich sie auf einem 64bit Ubuntu Linux.
Das Script selber sollte auf allen gängigen Linuxen laufen. Es werden keine Administratorenrechte benötigt.

Stephan
********
Beiträge: 11005
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: OpenOffice-Benutzerverzeichnis automatisiert umbenennen

Beitrag von Stephan » Di, 21.05.2019 09:16

Hallo Peter,

danke für das Skript.

Es wird etwas dauern bis ich Zeit finde das halbwegs ausführlich zu testen, wahrscheinlich erst im Juni. Ich schreibe dann auf jeden Fall etwas in den Thread hier.
Da Linux ein anderes Sicherheitskonzept als Windows hat, ist es dort nicht einfach so möglich Dateien automatisch zu starten.
Sie müssen zunächst ausführbar gemacht werden. So, wie Du das per Makro in Windows gelöst hast (Datei auspacken und aufrufen) geht das in Linux meines Wissens nicht.
Ich glaube es gab hier neulich einen Hinweis wie man mittels SHELL() auch aus StarBasic heraus Linux-Skripte ausführbar machen und starten kann, ich finde das aber momentan nicht.
Das könnte evtl. eine Möglichkeit sein.
Ich würde auch eine von OpenOffice unabhängige Lösung wählen, da eine ODF Datei nicht geöffnet werden kann, sollte OO richtig eingefroren sein. Eine unabhängigen Datei kann dann immer noch gestartet werden und OO in der Regel auch noch beenden.
Diese Überlegung ist schon richtig, aber Ziel meiner odt-Datei ist ja leichte Bedienbarkeit für Laien (eigentlich hätte ich das lieber in eine Extension gepackt, nur da man es ja nur ganz sporadisch braucht, schien mir das nicht so sinnvoll).

LibreOffice hat ja inzwischen (zeitlich nach dem Thread hier ;-)) eine ähnliche Lösung direkt ins Programm integriert. Ich kann noch nicht abschließend sagen wie zuverlässig das ist, dazu gibt es zu selten einen Anlass das unter Realbedingungen zu testen. Soweit ich bisher getestet habe funktioniert das gut, nur hätte man sich die Optionen sparen sollen/können.
Auch hierbei besteht natürlich das grundsätzliche Problem das LO noch starten können muss (bzw. ich weiß garnicht ob es dafür einen separaten Launcher, in der Art unopkg, gibt).

Ich fürchte es gibt da keinen Königsweg, denn irgendwie ist ja mein Anlass für das Tool gewesen, das ich häufig erlebe das Anwender nicht einmal i der Lage sind ein Verzeichnis zu finden und umzubenennen. Für solche Anwender ist wohl auch das manuelle Ausführbarmachen eines Scripts eine Hürde.



Gruß
Stephan

P.S.
sind die 3 Posts von Dir genau identisch? Dann lösche ich zwei. (ich nehme an da hat die Forumssoftware gehakt, so geht mir das auch gelegentlich)

Gast Peter

Re: OpenOffice-Benutzerverzeichnis automatisiert umbenennen

Beitrag von Gast Peter » Di, 21.05.2019 11:09

Guten Morgen Stephan.
Stephan hat geschrieben:
Di, 21.05.2019 09:16
P.S.
sind die 3 Posts von Dir genau identisch? Dann lösche ich zwei. (ich nehme an da hat die Forumssoftware gehakt, so geht mir das auch gelegentlich)
Ja, Server Error. Ich staune, das überhaupt was angekommen ist, denn ich hatte immer Timeout und hab dann abgebrochen.
Stephan hat geschrieben:
Di, 21.05.2019 09:16
Ich glaube es gab hier neulich einen Hinweis wie man mittels SHELL() auch aus StarBasic heraus Linux-Skripte ausführbar machen und starten kann, ich finde das aber momentan nicht.
Wenn das funktioniert, wäre die *.sh.x Datei aus dem Zip die richtige, weil sie dann funktioniert wie eine Win exe.

Ich habe das Script nochmal überarbeitet und eine Sicherheitsabfrage hinzugefügt (falls noch jemand Dateien offen hat).
Auf die Weise spart man auch die Warteschleife, die sicherstellen sollte, dass alle OO-Prozesse beendet sind.
Zusätzlich habe ich noch drei Screenshots vom Programmablauf reingepackt.

Link zum geänderten ZIP: http://www.imagenetz.de/f498f4a5b/OO_Be ... x.zip.html

Da das alte ZIP noch kein mal runtergeladen wurde, lösche ich das. Der alte Link funktioniert also nicht mehr.

Code: Alles auswählen

#!/bin/bash

##############################################################################################################
# 
# Mit diesem Script kann das OpenOffice Benutzerverzeichnis oder die Datei Registrymodifications.xcu
# umbenannt werden. Sicherheitshalber wird vorher eine Kopie angelegt. Wird das Umbenennen erneut
# durchgeführt, wird diese Kopie überschrieben. Daher ist es auch möglich, vorher eine Sicherheitskopie
# eines "gut funktionierenden" Benutzerverzeichnisses zu erstellen, die bei Bedarf zurückgespielt werden kann.
#
# Das Script muss zunächst ausführbar gemacht werden. Dazu mit der rechten Maustaste auf die Datei klicken
# und die "Dateieigenschaften" aufrufen. Dort auf dem Registerblatt "Zugriffsrechte" ankreuzen, dass die Datei
# als Programm ausgeführt werden darf.
# 
# Danach kann das Script mit Doppelklick auf den Dateinamen gestartet werden. Es öffnet sich ein
# Dialogfenster, in dem "Im Terminal ausführen" ausgewählt werden muss.
# 
##############################################################################################################

_temp="/tmp/ooanswer.$$"
OOreg_path=~/.openoffice/4/user
OOuser_path=~/.openoffice/4/

### Registrymodifications.xcu umbenennen ###
rename_registry() {
		# Datei umbenennen
		rm -r ~/.openoffice/4/user/registrymodifications.xcu_alt
		mv ~/.openoffice/4/user/registrymodifications.xcu ~/.openoffice/4/user/registrymodifications.xcu_alt
	
		# Meldung ausgeben
		dialog --no-lines --colors --msgbox " \n Die Datei registrymodifications.xcu wurde in  \n \Z1registrymodifications.xcu_alt\Zn umbenannt. \n Sie befindet sich in folgendem Verzeichnis:\n\n $OOreg_path \n\n OpenOffice kann jetzt neu gestartet werden." 12 50
}

### Benutzerverzeichnis umbenennen
rename_user() {
		rm -r ~/.openoffice/4/user_alt
		mv -f ~/.openoffice/4/user ~/.openoffice/4/user_alt
		dialog --no-lines --colors --msgbox " \n Das OpenOffice Benutzerverzeichnis wurde in \Z1 USER_ALT \Zn umbenannt.\n Es befindet sich in folgendem Verzeichnis:\n\n $OOuser_path \n\n OpenOffice kann jetzt neu gestartet werden." 12 70
}

### Benutzerverzeichnis sichern
safe_user() {
		rm -r ~/.openoffice/4/user_sik
		cp -a -r ~/.openoffice/4/user ~/.openoffice/4/user_sik
		dialog --no-lines --colors --msgbox " \n Das OpenOffice Benutzerverzeichnis wurde in \Z1 USER_SIK \Zn umbenannt.\n Es befindet sich in folgendem Verzeichnis:\n\n $OOuser_path \n\n OpenOffice kann jetzt neu gestartet werden." 12 70
}

### Benutzerverzeichnis wiederherstellen
restore_user() {
		rm -r ~/.openoffice/4/user
		cp -a -r ~/.openoffice/4/user_sik ~/.openoffice/4/user		
		dialog --no-lines --colors --msgbox " \n Das OpenOffice Benutzerverzeichnis wurde aus der Sicherung \n $OOuser_path wieder hergestellt \n\n OpenOffice kann jetzt neu gestartet werden." 12 70
}

### OpenOffice schließen
close_office() {
		dialog --no-lines --title " OpenOffice Benutzereinstellungen zurücksetzen"\
			--yes-label "Weiter" \
			--no-label "Abbrechen" \
			--yesno " \n Alle laufenden Prozesse von OpenOffice werden jetzt beendet. \n\n Sollten noch ungesicherte Dateien geöffnet sein,\n können diese jetzt noch gesichert werden. \n\n Drücken sie in diesem Fall erst nach dem Sichern auf < Weiter >" 12 70	

		case $? in
			0)		pkill soffice;;
			1)		exit;;
			255)	exit;;
		esac		
}

### Hauptmenü
main_menu() {
		dialog --no-lines --title " OpenOffice Benutzereinstellungen zurücksetzen"\
			--cancel-label "Abbrechen" \
			--menu "\nVor dem Zurücksetzen der Einstellungen wird jeweils eine Sicherungskopie des Ist-Zustandes der Dateien angelegt.\n\nEs ist auch möglich nur eine Sicherungskopie eines gut funktionierenden Benutzerverzeichnisses anzulegen. Bei Bedarf kann diese Sicherung zurückkopiert werden \n\nMit Maus, Richtungstasten oder Anfangsbuchstaben auswählen:\n " 20 64 10\
			Registry "sichern und Einstellungen zurücksetzen"\
			Benutzerverzeichnis "sichern und neu erstellen"\
			Sicherungskopie "ohne Zurücksetzen der Einstellungen"\
			Zurückkopieren "einer Sicherungskopie"\
			2>$_temp
			
		opt=${?}
		if [ $opt != 0 ]; then rm $_temp; exit; fi
		menuitem=`cat $_temp`
		case $menuitem in
			Registry) rename_registry;;
			Benutzerverzeichnis) rename_user;;
			Sicherungskopie) safe_user;;
			Zurückkopieren) restore_user;;
			Quit) exit;;
		esac
}

close_office
main_menu
rm $_temp
done

Stephan
********
Beiträge: 11005
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: OpenOffice-Benutzerverzeichnis automatisiert umbenennen

Beitrag von Stephan » Di, 21.05.2019 17:10

So, die zwei überflüssigen Posts habe ich gelöscht.
Ich staune, das überhaupt was angekommen ist, denn ich hatte immer Timeout und hab dann abgebrochen.
Genau erklären kann ich das auch nicht. Ich selbst erlebe es so das die Forumssoftware 'blockiert' und scheinbar nicht mehr reagiert, wenn man dann mehrfach den Beitrag absendet wird das offenbar noch in die Forumsdatenbank übernommen und steht beim automatischen Neustart (der Forumssoftware oder des Servers insgesamt - das weiß ich garnicht) dann später zur Verfügung.


Gruß
Stephan

Antworten