determining if user has shell access

Monte Goulding monte at sweattechnologies.com
Fri Oct 15 00:57:14 CDT 2010


> I'm assuming that at this point you don't know if this is some policy setting or simply the removal of some file.

It's a policy setting. Everything works fine if they run as an admin user. 

Aha! Google is my friend ;-)

By checking the registry key: HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\DisableCMD"=dword:1 we can find out if cmd.exe is disabled for the current user. 

Apparently command.com is often available when cmd isn't but unfortunately if I set the shellCommand to command.com it returns nothing (in vista). If I use command.com on the command line it works fine so I'm assuming the problem is on the LiveCode side of things. It would be good if a few others tested this so we can report it if it's not just my system.

function safeShell pCommand
   -- assume the shellCommand has been set appropriately
   set the hideConsoleWindows to true
   set the itemDel to "\"
   if item -1 of the shellCommand is "cmd.exe" AND \ 
          charToNum(queryRegistry("HKEY_CURRENT_USER\Software\Policies\Microsoft\Windows\System\DisableCMD")) = 1 then
      -- don't use cmd.exe because shell() won't return
      -- don't revert to command.com because there seems to be a problem in the engine
      return executeProcess(pCommand)
   else
      try
         -- still check for empty if your are expecting a result
         -- because there's no execution error on os x
         return shell(pCommand)
      catch e
         -- execution error on windows shellCommand doesn't exist
	 -- hopefully this catches hash rule blocks
         return "Error executing command"
      end try
   end if
end safeShell


function executeProcess pProcess,pElevate
   local tReturn
   if pElevate then
      open elevated process pProcess for text read
   else
      open process pProcess for text read
   end if
   repeat forever
      # Loop until there are no more lines to read.
      read from process pProcess for 1 line
      if the result = "" or the result = "timed out" then
         -- something to add
         put it after tReturn
      else
         close process pProcess
         return tReturn
      end if
   end repeat
end executeProcess

Cheers

--
Monte Goulding
M E R Goulding Software Development
Bespoke application development for vertical markets

InstallGadget - How to create an installer in 10 seconds
revObjective  - Making behavior scripts behave




More information about the use-livecode mailing list