-
Notifications
You must be signed in to change notification settings - Fork 0
/
SimpleXamppControl.ps1
94 lines (76 loc) · 3.29 KB
/
SimpleXamppControl.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# WICHTIG!
# Diese Datei muss als UTF-8 BOM gespeichert werden!
# Native Libraries laden
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
# Eigene Klassen laden
. $PSScriptRoot\Classes\GUIManager.ps1
. $PSScriptRoot\Classes\DatabaseTools.ps1
. $PSScriptRoot\Classes\NetworkShareTools.ps1
. $PSScriptRoot\Classes\XamppTools.ps1
# Globale Variabeln definieren
$xamppRootDirectory = "C:\xampp"
$xamppPublicDirectory = "C:\xampp-public"
$userWebDriveLetter = $null
# Parameter parsen und validieren
if ($args.Count -lt 2) {
Write-Host "Zu wenig Argumente. <Laufwerksbuchstabe für den BenutzerWebOrdner> <Bestehendes Laufwerk verwenden>"
exit 1
}
if(-Not($args[0] -match "^[A-Z]$")) {
Write-Host "Der Laufwerksbuchstabe" $args[0] "ist ungültig"
exit 1
}
if(-Not($args[1] -match "true" -Or $args[1] -Match "false")) {
Write-Host "Der Wert für bestehendes Laufwerk verwenden ist ungültig. Muss true/false sein. Ist:" $args[1]
exit 1
}
$userWebDriveLetter = $args[0]
[bool] $useExistingDriveLetter = If ($args[1] -Match "true") { $true } Else { $false }
# Alle Fehler abfangen und dem User zeigen
try {
# Klassen instanzieren
[GuiManager ] $guiManager = [GUIManager]::new(500, 210)
[NetworkShareTools] $networkShareTools = [NetworkShareTools]::new($userWebDriveLetter)
[DatabaseTools] $databaseTools = [DatabaseTools]::new($xamppRootDirectory + "\mysql")
[XamppTools] $xamppTools = [XamppTools]::new($xamppRootDirectory, $xamppPublicDirectory, $useExistingDriveLetter, $databaseTools, $networkShareTools)
# Gui erstellen
$guiManager.CreateLabel("Xampp Steuerung", 5, 5, 475, 40, 20)
$guiManager.CreateButton("Xampp beenden", 5, 70, 475, 40,
{
$guiManager.Close()
}.GetNewClosure()
)
$guiManager.CreateButton("Datenbank resetten", 5, 120, 475, 40,
{
# Nachfrage, ob die Datenbank wirklich resettet werden soll?
[DialogResult] $result = [MessageBox]::Show("Datenbank wirklich resetten? Sämtliche Daten in der Datenbank werden gelöscht und Xampp wird gestoppt!", "Fortfahren?", "YesNo", "Warning", "Button1")
if($result -ne [DialogResult]::Yes) {
return
}
$xamppTools.StopXampp()
$databaseTools.ResetDatabase()
$xamppTools.StartXampp()
[MessageBox]::Show("Zurücksetzen erfolgreich.")
}
)
$guiManager.AddCloseEvent(
{
# Das Programm soll beendet werden. Xampp stoppen und Netzwerklaufwerk unmounten
$xamppTools.StopXampp()
$xamppTools.RemoveNetworkDriveIfRequired()
$xamppTools.CleanPublicDirecotry()
}.GetNewClosure()
)
# Xampp starten
$xamppTools.StartXampp()
$guiManager.Show()
} catch {
Write-Host "Ein nicht behandelter Fehler ist aufgetreten:" $_.Exception.Message
# Messagebox dem User anzeigen
[MessageBox]::Show("Ein Fehler ist aufgetreten: " + $_.Exception.Message + ". Das Programm wird beendet", "Fataler Fehler", "OK", "Error")
# Wir versuchen zumindest noch das Netzwerklaufwerk zu unmounten
$xamppTools.RemoveNetworkDriveIfRequired()
$xamppTools.CleanPublicDirecotry()
exit 1
}