Post by Tim RobertsPost by samilnart .So when i launch my script on command line using pythonw it works fine
but if task scheduler launches it, it instantly crashes without error
message. Here is the code: http://pastebin.com/5QfmMrPN . Any help is
appreciated.
What user did you use to create your scheduled task? Is it running as you?
I'll hazard a guess that the script is being run as a regular user, or
as a non-elevated administrator (i.e. without configuring the task to
"run with highest privileges). In this case the netsh command will
fail.
Post by Tim RobertsYou might consider using the subprocess module to start your netsh
commands instead of os.system. os.system is going to want to create a
subshell, but processes running in a service (which scheduled tasks do)
aren't allowed to interact with the desktop.
A console process, such as cmd.exe, doesn't care about creating a
window. That's the job of the console host process, conhost.exe, which
is actually designed to allow running without a window (i.e. the
process creation flag CREATE_NO_WINDOW). I run cmd.exe in session 0
all the time via KpyM SSH. That spawns a "session.exe" console process
in session 0 that defaults to running a cmd shell.
But let's verify that running netsh via cmd actually works when
scheduled as a task that runs in session 0. I'll run as SYSTEM, since
I know the task engine uses session 0 in this case.
C:\> schtasks /create /tn firewall_options ^
More? /ru system /sc once /sd 01/01/1900 /st 00:00 /tr ^
More? "cmd /c 'netsh firewall /? ^> C:\firewall.txt'"
WARNING: Task may not run because /ST is earlier than current time.
SUCCESS: The scheduled task "firewall_options" has successfully
been created.
C:\>schtasks /run /tn firewall_options
SUCCESS: Attempted to run the scheduled task "firewall_options".
C:\>type firewall.txt
The following commands are available:
Commands in this context:
? - Displays a list of commands.
add - Adds firewall configuration.
delete - Deletes firewall configuration.
dump - Displays a configuration script.
help - Displays a list of commands.
set - Sets firewall configuration.
show - Shows firewall configuration.
To view help for a command, type the command, followed by a space, and then
type ?.
It works!
The script could redirect cmd's stdout and stderr to a log file, as I
did with stdout in the above example. For example:
os.system(r'"netsh advfirewall set currentprofile state on >
"%TEMP%\netsh.log" 2>&1"')