PDowning Posted June 24, 2013 Posted June 24, 2013 I'm sure it's been covered, but I keep getting confused on how many " or ' should be in the line. Here is what I am attempting: RunAs("administrator", "domain", "password", "msiexec.exe " I:\launcherapps\Language Arts\Reading\Read Out Loud.msi"") I keep getting syntax errors. Yes I could define : $RunMSI = " I:launcherappsLanguage ArtsReadingRead Out Loud.msi" , and then run a ShellExecute($RunMSI), but the stupid program keeps telling me the logged in user doesn't have rights to a directory and fails out, so I need to do a RunAs(). Right?
BrewManNH Posted June 24, 2013 Posted June 24, 2013 I'm guessing I: is a network location? Use the absolute name (UNC Path) instead of the drive letter, because the user credentials aren't going to have the I: drive. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
PDowning Posted June 24, 2013 Author Posted June 24, 2013 I'm guessing I: is a network location? Use the absolute name (UNC Path) instead of the drive letter, because the user credentials aren't going to have the I: drive. good thought, but this script will be used globally, so I can't hardcode it for a server name. I need to use the I: mapping.
Noddle Posted June 24, 2013 Posted June 24, 2013 I'm sure it's been covered, but I keep getting confused on how many " or ' should be in the line. Here is what I am attempting: RunAs("administrator", "domain", "password", "msiexec.exe " I:\launcherapps\Language Arts\Reading\Read Out Loud.msi"") I keep getting syntax errors. Yes I could define : $RunMSI = " I:launcherappsLanguage ArtsReadingRead Out Loud.msi" , and then run a ShellExecute($RunMSI), but the stupid program keeps telling me the logged in user doesn't have rights to a directory and fails out, so I need to do a RunAs(). Right? does RunAs("administrator", "domain", "password", 'msiexec.exe " I:launcherappsLanguage ArtsReadingRead Out Loud.msi"') ( single quote) work ? Nigel
BrewManNH Posted June 25, 2013 Posted June 25, 2013 (edited) good thought, but this script will be used globally, so I can't hardcode it for a server name. I need to use the I: mapping. My point was you shouldn't be using the I: drive because the credentials you're using in the RunAs won't have an I: drive, if the I: drive is a network share. They may have access to the drive's location, but there won't be a drive named I:. Edited June 25, 2013 by BrewManNH If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
PDowning Posted June 25, 2013 Author Posted June 25, 2013 does RunAs("administrator", "domain", "password", 'msiexec.exe " I:launcherappsLanguage ArtsReadingRead Out Loud.msi"') ( single quote) work ? Nigel No that gets me : RunAs() [built-in] called with wrong number of args. Is there a way I can just define the msiexec portion as a variable and pass that into the RunAs() instead?
PDowning Posted June 25, 2013 Author Posted June 25, 2013 (edited) My point was you shouldn't be using the I: drive because the credentials you're using in the RunAs won't have an I: drive, if the I: drive is a network share. They may have access to the drive's location, but there won't be a drive named I:. Ok gave this a shot: RunAs("administrator", "domain", "password", "msiexec.exe", "\\server\apps$\courseap\launcherapps\Language Arts\Reading\Read Out Loud.msi") I get no errors, but it appears the script isn't functioning either. The msi obviously isn't set to quiet or passive mode, so I should see it loading the msi, but I get nothing. Edit: fixed the unc designation Edit2: I have also tried adding this: $RunMSI = "\\server\apps$\courseap\launcherapps\Language Arts\Reading\Read Out Loud.msi" And changed the Runas() to: RunAs("administrator", "domain", "password", "msiexec.exe", $RunMSI) Again, no errors, and it runs anything else that is in the script. Baffled .... Edited June 25, 2013 by PDowning
KSum Posted June 25, 2013 Posted June 25, 2013 I put the compiled AutoIt script in a folder above the install, relative to the location of the msi, and then use the following to find the location. I have fond times when @ScriptDir reports back a drive and others that it reports a UNC, but do not know when or why. #include <WinNet.au3> ; Get the current location of this script $ScriptPath = @ScriptDir ;Make sure it is a UNC and not a mapped drive if StringInStr($ScriptPath, ":") > 0 Then $MyPath = _WinNet_GetUniversalName($ScriptPath) $ScriptPath = $MyPath[0] EndIf From here, I can use $ScriptPath and add the rest of the path to the msi. In your case, I may put the AutoIt executable in serverapps$courseaplauncherapps. Also, just to be sure, I would want to be sure that I have quotes around the ,si path & file since there are spaces. So I would have: $msiPath = '"' & $ScriptPath & '\Language Arts\Reading\Read Out Loud.msi"' RunAs("administrator", "domain", "password", "msiexec.exe", $msiPath) Karl
BrewManNH Posted June 25, 2013 Posted June 25, 2013 Your parameters for RunAs are wrong. You have "msiexec.exe" in the logon flag location. You should probably move that to the "program" location and append the MSI filename and path to the command to run. You might also want to add the full path to msiexe.exe as well as putting quotes around the MSI path/filename string. If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag GudeHow to ask questions the smart way! I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from. Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays. - ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script. - Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label. - _FileGetProperty - Retrieve the properties of a file - SciTE Toolbar - A toolbar demo for use with the SciTE editor - GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI. - Latin Square password generator
PDowning Posted June 25, 2013 Author Posted June 25, 2013 msiexec /i "i:\launcherapps\language arts\reading\read out loud.msi" that line works just fine from the CMD prompt. just the RunAs() doesn't like it. Trying the other suggestion as well.
KSum Posted June 25, 2013 Posted June 25, 2013 (edited) Good catch. I blindly copied the RunAs and made the minor change to use a variable. From a script I have that works well, modified slightly to match your use: #include <WinNet.au3> ; Get the current location of this script $ScriptPath = @ScriptDir ;Make sure it is a UNC and not a mapped drive if StringInStr($ScriptPath, ":") > 0 Then $MyPath = _WinNet_GetUniversalName($ScriptPath) $ScriptPath = $MyPath[0] EndIf ;set variables for the command $msiPath = '"' & $ScriptPath & '\Language Arts\Reading\Read Out Loud.msi"' $InstallCommand = 'msiexec /i "' & $msiPath ;Run the command $pid = RunAsWait($sUserName, $sDomain, $sPassword, 2, $InstallCommand, @TempDir, @SW_ENABLE) If $pid = 0 AND @error <> 0 Then MsgBox( 4096, "Installer", "Unable to Install Program. Run failed. Error = " & @error) MsgBox( 4096, "Installer", "Installation Aborted. " & $InstallCommand) Exit Else MsgBox(0, "MSI Command", "Command Run Succesfully.") EndIf I used RunAsWait so I could display a message when it was done. Sorry for the confusion... Edited June 25, 2013 by KSum
PDowning Posted June 25, 2013 Author Posted June 25, 2013 I put the compiled AutoIt script in a folder above the install, relative to the location of the msi, and then use the following to find the location. I have fond times when @ScriptDir reports back a drive and others that it reports a UNC, but do not know when or why. #include <WinNet.au3> ; Get the current location of this script $ScriptPath = @ScriptDir ;Make sure it is a UNC and not a mapped drive if StringInStr($ScriptPath, ":") > 0 Then $MyPath = _WinNet_GetUniversalName($ScriptPath) $ScriptPath = $MyPath[0] EndIf From here, I can use $ScriptPath and add the rest of the path to the msi. In your case, I may put the AutoIt executable in serverapps$courseaplauncherapps. Also, just to be sure, I would want to be sure that I have quotes around the ,si path & file since there are spaces. So I would have: $msiPath = '"' & $ScriptPath & '\Language Arts\Reading\Read Out Loud.msi"' RunAs("administrator", "domain", "password", "msiexec.exe", $msiPath) Karl Ok made the attempt at this and found a minor bug when reporting back the $msipath. It was returning the path doubled. so I removed the "language artsreading" portion from the $msi path. it now reports the correct path, but still won't run the msi.
KSum Posted June 25, 2013 Posted June 25, 2013 If both the AutoIt script and the msi file are in teh same folder, then yes, remove that portion. Be sure to add a backslash to the folder $msiPath and use the second example as it fixes the command to be all together and defines the logon flag. $msiPath should end up for you as: $msiPath = '"' & $ScriptPath & '\Read Out Loud.msi"'
PDowning Posted June 25, 2013 Author Posted June 25, 2013 Good catch. I blindly copied the RunAs and made the minor change to use a variable. From a script I have that works well, modified slightly to match your use: #include <WinNet.au3> ; Get the current location of this script $ScriptPath = @ScriptDir ;Make sure it is a UNC and not a mapped drive if StringInStr($ScriptPath, ":") > 0 Then $MyPath = _WinNet_GetUniversalName($ScriptPath) $ScriptPath = $MyPath[0] EndIf ;set variables for the command $msiPath = '"' & $ScriptPath & '\Language Arts\Reading\Read Out Loud.msi"' $InstallCommand = 'msiexec /i "' & $msiPath ;Run the command $pid = RunAsWait($sUserName, $sDomain, $sPassword, 2, $InstallCommand, @TempDir, @SW_ENABLE) If $pid = 0 AND @error <> 0 Then MsgBox( 4096, "Installer", "Unable to Install Program. Run failed. Error = " & @error) MsgBox( 4096, "Installer", "Installation Aborted. " & $InstallCommand) Exit Else MsgBox(0, "MSI Command", "Command Run Succesfully.") EndIf I used RunAsWait so I could display a message when it was done. Sorry for the confusion... If both the AutoIt script and the msi file are in teh same folder, then yes, remove that portion. Be sure to add a backslash to the folder $msiPath and use the second example as it fixes the command to be all together and defines the logon flag. $msiPath should end up for you as: $msiPath = '"' & $ScriptPath & '\Read Out Loud.msi"' Correct, they are in the same path. but nothing happens. the script executes and just sits there till i hit ctrl-break to stop it.
PDowning Posted June 25, 2013 Author Posted June 25, 2013 ok figured out why it isn't working. After a few placed msgbox's, $ScriptPath gets no value before the If .. Then statement. Inside the If statement, $MyPath gets no value as well, therefore $ScriptPath gets no value either.
KSum Posted June 25, 2013 Posted June 25, 2013 Can you do a msgbox on @ScriptDir please and see if it gives a value? It should and $ScriptPath should be set to that value.
PDowning Posted June 25, 2013 Author Posted June 25, 2013 Can you do a msgbox on @ScriptDir please and see if it gives a value? It should and $ScriptPath should be set to that value. It returns the correct mapped drive value of I:launcherappslanguage artsreading
KSum Posted June 25, 2013 Posted June 25, 2013 And you have this line before the first IF statement? $ScriptPath = @ScriptDir Use a msgbox to Check the value of $ScriptPath right after that line, please.
PDowning Posted June 25, 2013 Author Posted June 25, 2013 And you have this line before the first IF statement? $ScriptPath = @ScriptDir Use a msgbox to Check the value of $ScriptPath right after that line, please. #include <WinNet.au3> ; Get the current location of this script $ScriptPath = @ScriptDir MsgBox(0, "scriptdir", @ScriptDir) msgbox(0, "titlealpha", "scriptpath = ", $ScriptPath) That's the code.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now