Ich muss Befehle mit erhöhten Privilegien auf meinem Backend ausführen
Posted: 13 Feb 2025, 22:19
Für eine Umgebung, die ich entwickle (Elecron + BS5.3 + node.js + go + cobra ...), dessen Ziel es ist, eine Weboberfläche zu erstellen, damit Benutzer Systembefehle mithilfe von Schaltflächen und Formularen auf ausführen können : Windows, Linux oder Mac, um Dockers -Containerumgebungen zu verwalten. EM>
Das einzige, was ich gefunden habe
Ich habe diese Antwort gefunden, mit der ich nur bewerten kann, wie sie läuft, dies jedoch nicht die Anwendung mit erhöhten Berechtigungen auf node.js erzwingt oder wieder aufgerufen wird und aufgerufen wird Das Backend mit den gleichen erhöhten Berechtigungen. p>
In der C# -Version der Anwendung musste dies nur einmal durchgeführt werden, aber in dieser Entwicklung mit zwei Ebenen: (vorne und hinten) nehme ich an, dass es es sollte in beiden Bereichen bewertet werden ... < /p>
Ich werde bald Updates zu jedem Fortschritt hinzufügen. Ich denke an den node.js is-elevated Implementierung.
Ziel ist es Nun, damit der Benutzer Verzeichnisse und Dateien programmgesteuert erstellen kann.
Das einzige, was ich gefunden habe
Code: Select all
"scripts": {
"start": "electron src/main.js --trace-warnings --win32metadata.requested-execution-level=requireAdministrator",
"build": "electron-builder"
},
...
"win": {
"target": [
"nsis"
],
"artifactName": "webstack-deployer-for-docker-${version}.exe",
"icon": "src/assets/icons/icon.ico",
"requestedExecutionLevel": "requireAdministrator",
"adminRequested": true
},
Code: Select all
internal static void CheckElevated()
{
if (!IsRunAsAdmin())
{
RunApp();
}
}
public static void RunApp()
{
Assembly? assemblyEntries = Assembly.GetEntryAssembly();
if (assemblyEntries != null)
{
string executablePath = assemblyEntries.Location.Replace(".dll", ".exe");
if (!File.Exists(executablePath) && Environment.ProcessPath != null)
{
executablePath = Environment.ProcessPath;
}
if (File.Exists(executablePath))
{
ProcessStartInfo processInfo = new()
{
UseShellExecute = true,
WorkingDirectory = Environment.CurrentDirectory,
FileName = executablePath,
Verb = "runas"
};
try
{
Process.Start(processInfo);
Environment.Exit(0);
}
catch (Exception ex)
{
MessageBox.Show("Error: This program must be run as an administrator! \n\n" + ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
else
{
MessageBox.Show("Error: This program must be run as an administrator!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
public static bool IsRunAsAdmin()
{
try
{
WindowsIdentity id = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new(id);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
catch (Exception)
{
return false;
}
}
Ich werde bald Updates zu jedem Fortschritt hinzufügen. Ich denke an den node.js is-elevated Implementierung.
Ziel ist es Nun, damit der Benutzer Verzeichnisse und Dateien programmgesteuert erstellen kann.