RunAs & msi

  • Hiho,

    ich wollte ein minitool schreiben, mit dem ich schnell sachen installieren kann.
    ich starte das script, suche eine datei aus und diese wird mit admin-rechten gestartet.

    exe-dateien gehen, .msi aber zB nicht. kann man das irgendwie einbauen?

    [autoit]

    RunAs($sUserName, @ComputerName, $sPassword, 0, FileOpenDialog("Run as Admin", "", "All (*.*)"), @SystemDir)

    [/autoit]
  • rechtsklick auf die datei -> ausführen als...

    hat windoof doch schon integriert :P ;)

  • Hatte mal was für unsere win 2000 clients ohne sp gemacht... das kannst dir ja umbauen

    Spoiler anzeigen
    [autoit]


    $pass=InputBox("Passwort", "Passwort für DOMÄNE\Administrator eingeben", "", "*")
    If $pass="" Then
    MsgBox(0, "Fehler", "Kein Passwort eingegeben, Script wird beendet...")
    Exit
    Else
    $file=FileOpenDialog("Setup-Datei auswählen", @HomeDrive, "All (*.*)")
    $error=RunAs("Administrator", "DOMÄNE", $pass, 0, $file)
    If $error=0 Then
    MsgBox(0, "Fehler", "Passwort richtig eingegeben? Script wird beendet...")
    Exit
    EndIf
    EndIf

    [/autoit]
  • deine Variante geht leider nicht.

    Was ist denn "geht leider nicht" für ein Fehler ?

    So ?

    [autoit]

    $sUserName = "Administrator"
    $sPassword = "***"
    RunAs($sUserName, @ComputerName, $sPassword, 0, 'msiexec /i "' & FileOpenDialog("Run as Admin", "", "All (*.*)") & '"', @SystemDir)

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • [autoit]

    FileDelete(@TempDir & "\runmsi.bat")
    $sCmdFile = '@echo off' & @CRLF _
    & '"' & $File & '"' & @CRLF _
    & 'del ' & @TempDir & '\runmsi.bat'
    FileWrite(@TempDir & "\runmsi.bat", $sCmdFile)
    RunAs($data[0], @ComputerName, $data[1], 0, "runmsi.bat", @TempDir)

    [/autoit]

    Hallo, habe es jetzt mal so probiert.
    wenn ich die batch datei mit admin-cmd ausführe, funzt das ... leider funktioniert hier der runas befehl iwie nicht, wobei ich nicht weiss, wieso?

    ein anderer teil des tools sieht so aus und geht:

    [autoit]

    RunAs($data[0], @ComputerName, $data[1], 0, @ComSpec, @SystemDir)

    [/autoit]
  • nee, das ist es nicht, es ist komisch.

    hier mal das ganze script:

    [autoit]

    Func _RunAs()
    $File = FileOpenDialog("File", @DesktopCommonDir, "Executables (*.exe;*.msi;*.bat;*.cmd)")
    If Not $File = "" Or @error Then
    $Split = _PathSplit1($File)
    If Not @error Then
    If $Split[7] = "msi" Then
    FileDelete(@TempDir & "\runmsi.bat")
    $sCmdFile = '@echo off' & @CRLF _
    & '"' & $File & '"' & @CRLF _
    & 'del ' & @TempDir & '\runmsi.bat'
    FileWrite(@TempDir & "\runmsi.bat", $sCmdFile)
    $File = @TempDir & "\runmsi.bat"
    EndIf

    $Split = _PathSplit1($File)
    If Not @error Then
    _GetData()
    $r = RunAs($data[0], @ComputerName, $data[1], 0, $Split[5], $Split[2])
    MsgBox(0, $r & @CRLF & @error, $data[0] & @CRLF & $data[1] & @CRLF & $Split[5] & @CRLF & $Split[2])
    EndIf
    EndIf
    EndIf
    _ClearData()
    EndFunc

    [/autoit]

    ich habe es jetzt so umgeschrieben, das für msi-dateien eine bat erstellt wird und diese von der normalen routine ausgeführt wird.
    die normale routine funktioniert bei exe, bat und cmd supi.

    die msi-routine funktioniert aber auch im oben genannten bsp. nicht. die bat wird erstellt, aber runas gibt nen fehler zurück. führe ich aber die bat in der normaler routine per hand aus, funktioniert das auch. also syntay fehler gibt es wohl nicht, aber wo liegt der hund begraben???

  • geschafft ...

    bei msi sollte wohl bei RunAs der ganze Pfad, anstatt nur das File stehen.

    so geht es auf jeden Fall:

    [autoit]

    Func _RunAs()
    $File = FileOpenDialog("File", @DesktopCommonDir, "Executables (*.exe;*.msi;*.bat;*.cmd)")
    If Not $File = "" Or @error Then
    $Split = _PathSplit1($File)
    If Not @error Then
    _GetData()
    If $Split[7] = "msi" Then
    FileDelete(@TempDir & "\runmsi.bat")
    $sCmdFile = '@echo off' & @CRLF _
    & '"' & $File & '"' & @CRLF _
    & 'del ' & @TempDir & '\runmsi.bat'
    FileWrite(@TempDir & "\runmsi.bat", $sCmdFile)
    $File = @TempDir & "\runmsi.bat"
    RunAs($data[0], @ComputerName, $data[1], 0, $File, @TempDir)
    Exit
    Else
    RunAs($data[0], @ComputerName, $data[1], 0, $Split[5], $Split[2])
    EndIf
    EndIf
    EndIf
    _ClearData()
    EndFunc

    [/autoit]