Guten Abend Leute,
Ich habe in meiner Anwendung eine Abfrage, ob die Anwendung mit SuperUser-Privilegien (oder Admin auf Windows) ausgeführt wird.
Wenn nicht, wird eine PrivilegeNotHeldException geschmissen, die in der Main-Methode abgefangen werden soll und dementsprechend die Anwendung
neu gestartet (oder halt nicht) wird.
ApplicationConfig.cs
Program.cs
Das Neustarten der Anwendung geschieht ausschließlich über den Catch.
Allerdings wird dieser nicht abgefangen. Lass ich die Anwendung zum Ende laufen, schmeißt Mono den Fehler als unbehandelte Ausnahme.
Nehme ich eine andere Ausnahme, oder fange ich generell ab (Exception ex), beobachte ich weiterhin das obige Verhalten.
Hat jemand eine Idee?
EDIT:
Wird die Methode nicht asynchron aufgerufen, wird die Ausnahme abgefangen.
Jedoch würde ich die Methode gerne asynchron behalten.
Ich habe in meiner Anwendung eine Abfrage, ob die Anwendung mit SuperUser-Privilegien (oder Admin auf Windows) ausgeführt wird.
Wenn nicht, wird eine PrivilegeNotHeldException geschmissen, die in der Main-Methode abgefangen werden soll und dementsprechend die Anwendung
neu gestartet (oder halt nicht) wird.
ApplicationConfig.cs
Program.cs
C#-Quellcode
- try {
- _applicationConfig.LoadConfig();
- } catch (PrivilegeNotHeldException ex) {
- Console.Write("Application requires superuser privileges on first boot!\n" +
- "For WebX to be able to run, certain files and directories are required.\n" +
- "If you do not want WebX to restart with superuser privileges, please select [N]o.\n" +
- "If you choose not to restart WebX w/ superuser privileges, please manually create the following directories:\n" +
- " - {0}\n" +
- " - {1}\n" +
- " - {2}\n" +
- " - {3}\n\n" +
- "Select: [Y]es to restart, [n]o to exit: ",
- _applicationConfig.WebXConfig.ConfigDir,
- _applicationConfig.WebsiteConfigDir,
- _applicationConfig.WebXConfig.WwwRoot,
- _applicationConfig.WebXConfig.ScriptDir
- );
- var input = Console.ReadLine();
- if (string.IsNullOrEmpty(input) || input.ToLowerInvariant() == "y") {
- ElevatedRestart(args);
- return NoError;
- } else return MiscellaneousError;
- }
Das Neustarten der Anwendung geschieht ausschließlich über den Catch.
Allerdings wird dieser nicht abgefangen. Lass ich die Anwendung zum Ende laufen, schmeißt Mono den Fehler als unbehandelte Ausnahme.
Quellcode
- [ERROR] FATAL UNHANDLED EXCEPTION: System.Security.AccessControl.PrivilegeNotHeldException: Missing administrator privileges to write to /etc/webx
- at WebX.Config.ApplicationConfig.LoadConfig () [0x00495] in /home/simon/RiderProjects/WebX/WebX/Config/ApplicationConfig.cs:166
- at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__6_1 (System.Object state) [0x00000] in <0f8aeac9d63d4b8aa575761bb4e65b79>:0
- at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context (System.Object state) [0x00007] in <0f8aeac9d63d4b8aa575761bb4e65b79>:0
- at System.Threading.ExecutionContext.RunInternal (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserv$
- at System.Threading.ExecutionContext.Run (System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, System.Object state, System.Boolean preserveSyncCtx$
- at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem () [0x00021] in <0f8aeac9d63d4b8aa575761bb4e65b79>:0
- at System.Threading.ThreadPoolWorkQueue.Dispatch () [0x00074] in <0f8aeac9d63d4b8aa575761bb4e65b79>:0
- at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback () [0x00000] in <0f8aeac9d63d4b8aa575761bb4e65b79>:0
Nehme ich eine andere Ausnahme, oder fange ich generell ab (Exception ex), beobachte ich weiterhin das obige Verhalten.
Hat jemand eine Idee?
EDIT:
Wird die Methode nicht asynchron aufgerufen, wird die Ausnahme abgefangen.
Jedoch würde ich die Methode gerne asynchron behalten.
"Nichts ist unendlich, bis auf die menschliche Dummheit" - Albert Einstein
"Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln
"Man sollte nicht alles vertrauen, was im Netz steht" - Abraham Lincoln
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „BeatsleigherXDA“ ()