According to the changelog at http://pywin32.hg.sourceforge.net/hgweb/pywin32/pywin32/raw-file/tip/CHANGES.txt build 204 added this fix:
Python services will no longer have %System32% as the CWD when they start (the directory of the hosting exectutable will be used instead). This should prevent ImportError due to DLLs in that System32 directory being found for Python imports.
But I am using build 219 on Python 3.4 / x64 and my service application reports that at servce start the current working direcory is in fact C:\Windows\System32
The following information was included with the event:
CWD=C:\WINDOWS\system32
This log message was written by my app at the start of function def SvcDoRun(self):
Am I misunderstanding or doing something wrong? Or did the fix mentioned in build 204 subsequently go away?
Old Bugs - new issues at https://github.com/mhammond/pywin32/issues: #720
The code remains in place in PythonService_main in PythonService.cpp - however, it's certainly possible that it is not working as expected for you. I'll try and find some time to take a look.
Thanks, Mark. I have a Windows service, packaged with Py2EXE. The service
needs to be able to find a settings.cfg
FYI I am seeing different behavior between running the service on Windows 10
Pro x64 and Win Server 2012 R2 Datacenter x64, not to mention when run as a
Py2Exe vs. a .py script, as follows:
Win10
CWD: Win10=C:\WINDOWS\system32
Os.path.dirname(sys.executable): C:\MyProgramDir
Sys.argv[0]: C:\MyProgramDir\MyProgram.exe
Win2012
CWD: C:\Windows\system32
Os.path.dirname(sys.executable): C:\Windows\system32
Sys.argv[0]: C:\MyProgramDir\MyProgram.exe
Python Script on Win 10
CWD: C:\MyProgramDir
Os.path.dirname(sys.executable): C:\MyPythonDir\python.exe
Sys.argv[0]: = C:\MyProgramDir\MyProgram.py
Some of this makes sense-when running as a python script, the executable is
python.exe, and the first parameter passed to python.exe would be
MyProgram.py
The surprise is that Os.path.dirname(sys.executable) returns different
results on Win10 than it does on Server 2012.
It seems that looking to Sys.argv[0] is (in my limited testing) the only
consistent place to look for the path of the program file.
If pywin32 reported CWD as the program file directory, this would be
convenient. However, it isn't a huge deal to manually figure out the path
from Sys.argv[0]
From: Mark Hammond [mailto:mhammond@users.sf.net]
Sent: Monday, May 09, 2016 4:22 PM
To: [pywin32:bugs] 720@bugs.pywin32.p.re.sf.net
Subject: [pywin32:bugs] #720 CWD is still \Windows\System32 for service
application
The code remains in place in PythonService_main in PythonService.cpp -
however, it's certainly possible that it is not working as expected for you.
I'll try and find some time to take a look.
[bugs:#720] https://sourceforge.net/p/pywin32/bugs/720/ CWD is still
\Windows\System32 for service application
Status: open
Group: v1.0 (example)
Labels: service cwd
Created: Mon May 09, 2016 04:39 PM UTC by David Rueter
Last Updated: Mon May 09, 2016 04:39 PM UTC
Owner: nobody
According to the changelog at
http://pywin32.hg.sourceforge.net/hgweb/pywin32/pywin32/raw-file/tip/CHANGES
.txt build 204 added this fix:
Python services will no longer have %System32% as the CWD when they start
(the directory of the hosting exectutable will be used instead). This should
prevent ImportError due to DLLs in that System32 directory being found for
Python imports.
But I am using build 219 on Python 3.4 / x64 and my service application
reports that at servce start the current working direcory is in fact
C:\Windows\System32
The following information was included with the event:
CWD=C:\WINDOWS\system32
This log message was written by my app at the start of function def
SvcDoRun(self):
Am I misunderstanding or doing something wrong? Or did the fix mentioned in
build 204 subsequently go away?
Sent from sourceforge.net because you indicated interest in
https://sourceforge.net/p/pywin32/bugs/720/
To unsubscribe from further messages, please visit
https://sourceforge.net/auth/subscriptions/
Related
Old Bugs - new issues at https://github.com/mhammond/pywin32/issues: #720
Thanks for the update - note that py2exe will have slightly different behaviour and in general does not hit that "set the cwd" code - the easiest fix for that is probably to modify boot_service.py in py2exe to set the cwd before calling the servicemanager functions.
FYI, I ended up writing a procedure like this to figure out what directory
to use. I have tested it only on Windows-but it does the job on running as
a python script, running as a Py2Exe .EXE, running as a Py2Exe service, on
Win10 x64 and Win Server 2012 x64.
import os
import sys
def get_program_directory():
myscript.py
CWD
when
case...
From: David Rueter [mailto:drueter@assyst.com]
Sent: Monday, May 09, 2016 5:15 PM
To: '[pywin32:bugs] ' 720@bugs.pywin32.p.re.sf.net
Subject: RE: [pywin32:bugs] #720 CWD is still \Windows\System32 for service
application
Thanks, Mark. I have a Windows service, packaged with Py2EXE. The service
needs to be able to find a settings.cfg
FYI I am seeing different behavior between running the service on Windows 10
Pro x64 and Win Server 2012 R2 Datacenter x64, not to mention when run as a
Py2Exe vs. a .py script, as follows:
Win10
CWD: Win10=C:\WINDOWS\system32
Os.path.dirname(sys.executable): C:\MyProgramDir
Sys.argv[0]: C:\MyProgramDir\MyProgram.exe
Win2012
CWD: C:\Windows\system32
Os.path.dirname(sys.executable): C:\Windows\system32
Sys.argv[0]: C:\MyProgramDir\MyProgram.exe
Python Script on Win 10
CWD: C:\MyProgramDir
Os.path.dirname(sys.executable): C:\MyPythonDir\python.exe
Sys.argv[0]: = C:\MyProgramDir\MyProgram.py
Some of this makes sense-when running as a python script, the executable is
python.exe, and the first parameter passed to python.exe would be
MyProgram.py
The surprise is that Os.path.dirname(sys.executable) returns different
results on Win10 than it does on Server 2012.
It seems that looking to Sys.argv[0] is (in my limited testing) the only
consistent place to look for the path of the program file.
If pywin32 reported CWD as the program file directory, this would be
convenient. However, it isn't a huge deal to manually figure out the path
from Sys.argv[0]
From: Mark Hammond [mailto:mhammond@users.sf.net]
Sent: Monday, May 09, 2016 4:22 PM
To: [pywin32:bugs] 720@bugs.pywin32.p.re.sf.net <mailto:720@bugs.pywin32.p.re.sf.net >
Subject: [pywin32:bugs] #720 CWD is still \Windows\System32 for service
application
The code remains in place in PythonService_main in PythonService.cpp -
however, it's certainly possible that it is not working as expected for you.
I'll try and find some time to take a look.
[bugs:#720] https://sourceforge.net/p/pywin32/bugs/720/ CWD is still
\Windows\System32 for service application
Status: open
Group: v1.0 (example)
Labels: service cwd
Created: Mon May 09, 2016 04:39 PM UTC by David Rueter
Last Updated: Mon May 09, 2016 04:39 PM UTC
Owner: nobody
According to the changelog at
http://pywin32.hg.sourceforge.net/hgweb/pywin32/pywin32/raw-file/tip/CHANGES
.txt build 204 added this fix:
Python services will no longer have %System32% as the CWD when they start
(the directory of the hosting exectutable will be used instead). This should
prevent ImportError due to DLLs in that System32 directory being found for
Python imports.
But I am using build 219 on Python 3.4 / x64 and my service application
reports that at servce start the current working direcory is in fact
C:\Windows\System32
The following information was included with the event:
CWD=C:\WINDOWS\system32
This log message was written by my app at the start of function def
SvcDoRun(self):
Am I misunderstanding or doing something wrong? Or did the fix mentioned in
build 204 subsequently go away?
Sent from sourceforge.net because you indicated interest in
https://sourceforge.net/p/pywin32/bugs/720/
To unsubscribe from further messages, please visit
https://sourceforge.net/auth/subscriptions/
Related
Old Bugs - new issues at https://github.com/mhammond/pywin32/issues: #720