Commit 06e3b28b authored by Mark Hammond's avatar Mark Hammond

Update to latest WinBuilders, as per http://www.zope.org/Collectors/Zope/1782

parent fa7b6004
...@@ -4,68 +4,71 @@ The installers have only been tested under Windows 2K, but should work ...@@ -4,68 +4,71 @@ The installers have only been tested under Windows 2K, but should work
without incident on XP. It "almost works" on Win98SE (see bottom of without incident on XP. It "almost works" on Win98SE (see bottom of
file for discussion). file for discussion).
Setup Environment
------------------
Install Cygwin from cygwin.org (the default installation should give Install Cygwin from cygwin.org (the default installation should give
you everything you need). you everything you need).
Install Microsoft Visual C++ 6.0. Install Microsoft Visual C++ 6.0 (or MSVC 7 once we get to Python 2.4)
Install InnoSetup 4.0 from www.jrsofware.org (into its default location).
4.0.4-beta seems to work, while 4.0.7 does not. Symptom: type error
on compilation. 4.0.11 appears to work.
Unpack this package into a directory.
Launch a Cygwin bash shell. If necessary, run the VCVARS.bat to set up
the VC++ environment. This shouldn't be necessary on Win2K, provided
you've brought up the GUI at least once (MSDev doesn't finish writing
all the registry keys it should until the GUI is first launched). See
below for Win98SE.
If you're building Zope against Python 2.3.X, you may need to add some
registry entries due to a bug in the distutils msvccompiler.py:
[HKEY_CURRENT_USER\Software\Microsoft\DevStudio\6.0\Build System\Components\Platforms\Win32 (x86)\Directories]
"path dirs"="c:\\windows\\system32;c:\\Program Files\\Microsoft Visual Studio\\Common\\Tools\\WinNT; c:\\Program Files\\Microsoft Visual Studio\\Common\\MSDev98\\Bin;c:\\Program Files\\Microsoft Visual Studio\\Common\\Tools;c:\\Program Files\\Microsoft Visual Studio\\VC98\\bin"
"library dirs"="C:\\Program Files\\Microsoft Visual Studio\\VC98\\mfc\\lib;C:\\Program Files\\Microsoft Visual Studio\\VC98\\lib"
"include dirs"="C:\\Program Files\\Microsoft Visual Studio\\VC98\\atl\\include;C:\\Program Files\\Microsoft Visual Studio\\VC98\\mfc\\include;C:\\Program Files\\Microsoft Visual Studio\\VC98\\include"
This is unecessary if building against Python 2.2.X. [Tim didn't find Install InnoSetup 4.2 from www.jrsofware.org (into its default location).
this necessary building against Python 2.3.3 and Christian against 2.3.4 either.] Versions earlier than 4.0.11 are known to not work; any 4.2.x release
or later should be fine. Inno 5.x versions do *not* work (it appears the
Inno "custom dialog" mechanism has changed in an incompatible way)
From the parent directory of the package, make a "tmp" directory. From the parent directory of the package, make a "tmp" directory. Place
the necessary pre-requisites in this directory. At the time of this writing,
this includes:
Get necessary source packages and place them in the tmp directory. At the time - Python-2.3.5.tgz
of this writing, this includes: - Python-2.3.5.exe (used for binary modules)
- pywin32-204.win32-py2.3.exe (extracts binaries and sources)
- Python-2.3.4.tgz
- Python-2.3.4.exe (used for binary modules)
- win32all-163.exe
- Zope.tgz - Zope.tgz
As time marches on, these version numbers will obviously change. As time marches on, these version numbers will obviously change. See
mk/python.mk for the exact versions required.
If you see any make errors with references to one of these files, it's because Building
you've not downloaded them or you've not placed them in 'tmp'. --------
Launch a Cygwin bash shell, and from the parent directory, type:
WinBuilders/buildout <type>
where type is one of "python", "zope", or "zeo". Alternatively, you can
avoid the bash shell completely, and from a Windows command prompt type:
bash WinBuilders/buildout <type>
From the parent directory of the package, type WinBuilders/buildout <type> Everything should work!
where type is one of "python", "zope", or "zeo". * For python, the buildout populates the "build" directory with a Python
laid out for Zope and/or ZEO.
For python, the buildout populates the "build" directory with a Python * For 'zope', the buildout populates the "build" directory with a Windows
laid out for Zope and/or ZEO. executable installer (read the Makefile.zope for special instructions).
For 'zope', the buildout populates the "build" directory with a Windows * For 'zeo', the buildout populates the "build" directory with a Windows
executable installer (read the Makfile.zope for special instructions). executable installer (read the Makefile.zeo for special instructions).
For 'zeo', the buildout populates the "build" directory with a Windows If the build fails:
executable installer (read the Makefile.zeo for special instructions).
If the Windows drive you are working on is not C: (or Inno isn't installed
there!), try executing the following:
WinBuilders/buildout <type> CYGROOT=/cygdrive/{your_drive_letter}
If you see errors relating to MSVC not being installed, or the build process
failing to find MSVC, it may be necessary to bring up the MSVC gui
at least once (MSDev doesn't finish writing
all the registry keys it should until the GUI is first launched). If may
also be necessary to run VCVARS.bat to set up the VC++ environment (but
generally is not.) See below for Win98SE.
Win98SE notes If you see any make errors with references to any of the files required
------------- in tmp/ (see 'Setup Environment' above), it's because a later version is
- You have to run vcvars32.bat to set up envars for MSVC 6. Running that now required, or the files you've downloaded are not in 'tmp'.
from a bash shell doesn't have any effect on the Cygwin PATH.
This works: All platform notes
------------------
- Depending on your MSVC installation options, you have to run vcvars32.bat
to set up envars for MSVC. Running that from a bash shell doesn't have any
effect on the Cygwin PATH. This works:
+ Open a native DOS box. + Open a native DOS box.
+ Run vcvars32.bat. + Run vcvars32.bat.
...@@ -74,6 +77,8 @@ Win98SE notes ...@@ -74,6 +77,8 @@ Win98SE notes
desktop shortcut resolves to, so you can get the exact path by looking desktop shortcut resolves to, so you can get the exact path by looking
at the icon's Properties). at the icon's Properties).
Win98SE notes
-------------
- Every time a makefile runs xcopy, there's a segfault in kernel32.dll, - Every time a makefile runs xcopy, there's a segfault in kernel32.dll,
which hangs the bash shell with an endless succession of error boxes. which hangs the bash shell with an endless succession of error boxes.
The only way I found to break out of this was to bring up the debugger, The only way I found to break out of this was to bring up the debugger,
......
...@@ -10,6 +10,7 @@ DefaultGroupName=Zope <<VERSION>> ...@@ -10,6 +10,7 @@ DefaultGroupName=Zope <<VERSION>>
OutputBaseFilename=Zope-<<VERSION>>-win32 OutputBaseFilename=Zope-<<VERSION>>-win32
WizardImageFile=<<MAKEFILEDIR>>\etc\zlogo_left.bmp WizardImageFile=<<MAKEFILEDIR>>\etc\zlogo_left.bmp
WizardSmallImageFile=<<MAKEFILEDIR>>\etc\zlogo_top.bmp WizardSmallImageFile=<<MAKEFILEDIR>>\etc\zlogo_top.bmp
SolidCompression=yes
SourceDir=. SourceDir=.
OutputDir=. OutputDir=.
...@@ -30,8 +31,9 @@ Source:"import\*.*"; DestDir: "{app}\import"; Flags: ignoreversion recursesubdir ...@@ -30,8 +31,9 @@ Source:"import\*.*"; DestDir: "{app}\import"; Flags: ignoreversion recursesubdir
Source:"lib\*.*"; DestDir: "{app}\lib"; Flags: ignoreversion recursesubdirs Source:"lib\*.*"; DestDir: "{app}\lib"; Flags: ignoreversion recursesubdirs
Source:"skel\*.*"; DestDir: "{app}\skel"; Flags: ignoreversion recursesubdirs Source:"skel\*.*"; DestDir: "{app}\skel"; Flags: ignoreversion recursesubdirs
; these are required to be put into the bin directory for proper function of NT services ; these are required to be put into the bin directory for proper function of NT services
Source:"bin\Lib\site-packages\PythonService.exe"; DestDir: "{app}\bin"; Flags: ignoreversion Source:"bin\Lib\site-packages\win32\PythonService.exe"; DestDir: "{app}\bin"; Flags: ignoreversion
Source:"bin\Lib\site-packages\PyWinTypes23.dll"; DestDir: "{app}\bin"; Flags: ignoreversion Source:"bin\Lib\site-packages\pywin32_system32\PyWinTypes23.dll"; DestDir: "{app}\bin"; Flags: ignoreversion
Source:"bin\Lib\site-packages\pywin32_system32\PythonCOM23.dll"; DestDir: "{app}\bin"; Flags: ignoreversion
; This is a helper module for manging registry entries at uninstall time ; This is a helper module for manging registry entries at uninstall time
Source: "<<MAKEFILEDIR>>\bin\fixreg.py"; DestDir: "{app}\bin"; Flags: ignoreversion Source: "<<MAKEFILEDIR>>\bin\fixreg.py"; DestDir: "{app}\bin"; Flags: ignoreversion
...@@ -49,7 +51,7 @@ Filename: "{app}\bin\pythonw.exe"; Parameters: """{code:GetDataDir}\bin\zopeserv ...@@ -49,7 +51,7 @@ Filename: "{app}\bin\pythonw.exe"; Parameters: """{code:GetDataDir}\bin\zopeserv
Filename: "{code:GetDataDir}\bin\runzope.bat"; Description: "Launch Zope"; Flags: nowait postinstall skipifsilent; Check: DontDoService Filename: "{code:GetDataDir}\bin\runzope.bat"; Description: "Launch Zope"; Flags: nowait postinstall skipifsilent; Check: DontDoService
[UninstallRun] [UninstallRun]
Filename: "{app}\bin\pythonw.exe"; Parameters: """{code:GetDataDir}\bin\zopeservice.py"" stop"; Check: DoService Filename: "{app}\bin\pythonw.exe"; Parameters: """{code:GetDataDir}\bin\zopeservice.py"" --wait=30 stop"; Check: DoService
Filename: "{app}\bin\pythonw.exe"; Parameters: """{code:GetDataDir}\bin\zopeservice.py"" remove"; Check: DoService Filename: "{app}\bin\pythonw.exe"; Parameters: """{code:GetDataDir}\bin\zopeservice.py"" remove"; Check: DoService
Filename: "{app}\bin\pythonw.exe"; Parameters: """{app}\bin\decompilezpy.py"" ""{app}""" Filename: "{app}\bin\pythonw.exe"; Parameters: """{app}\bin\decompilezpy.py"" ""{app}"""
Filename: "{app}\bin\pythonw.exe"; Parameters: """{app}\bin\fixreg.py"" ""<<VERSION>>""" Filename: "{app}\bin\pythonw.exe"; Parameters: """{app}\bin\fixreg.py"" ""<<VERSION>>"""
...@@ -105,7 +107,7 @@ begin ...@@ -105,7 +107,7 @@ begin
{ Ask for a dir until the user has approved one or clicked Back or Cancel } { Ask for a dir until the user has approved one or clicked Back or Cancel }
Next:= InputDir(DataDirValues[0], DataDir); Next:= InputDir(False, DataDirValues[0], DataDir);
if Next and FileOrDirExists(DataDir) then DirOk := False; if Next and FileOrDirExists(DataDir) then DirOk := False;
...@@ -117,7 +119,7 @@ begin ...@@ -117,7 +119,7 @@ begin
if FileOrDirExists(DataDir) then begin if FileOrDirExists(DataDir) then begin
DirOk := MsgBox('Directory Exists' #13#13 'The directory ' + DataDir + ' already exists. Would you like to create instance files in that directory anyway?', mbConfirmation, MB_YESNO) = idYes; DirOk := MsgBox('Directory Exists' #13#13 'The directory ' + DataDir + ' already exists. Would you like to create instance files in that directory anyway?', mbConfirmation, MB_YESNO) = idYes;
end; end;
if not DirOk then Next := InputDir(DataDirValues[0], DataDir); if not DirOk then Next := InputDir(False, DataDirValues[0], DataDir);
end; end;
Result:=Next; Result:=Next;
...@@ -128,7 +130,7 @@ function CollectPassword(): Boolean; ...@@ -128,7 +130,7 @@ function CollectPassword(): Boolean;
var var
Next: Boolean; Next: Boolean;
begin begin
ScriptDlgPageSetSubCaption1('Specify adminisrator password'); ScriptDlgPageSetSubCaption1('Specify administrator password');
ScriptDlgPageSetSubCaption2('The login name for your Zope administrator account is "admin". When you first connect to the Zope management interface, you will need to login using the "admin" username and the password you specify below.'); ScriptDlgPageSetSubCaption2('The login name for your Zope administrator account is "admin". When you first connect to the Zope management interface, you will need to login using the "admin" username and the password you specify below.');
Next := InputQueryArrayEx(PasswordPrompts, PasswordChars, PasswordValues); Next := InputQueryArrayEx(PasswordPrompts, PasswordChars, PasswordValues);
......
...@@ -30,6 +30,8 @@ CSCRIPT=cscript ...@@ -30,6 +30,8 @@ CSCRIPT=cscript
ECHO=echo ECHO=echo
ISS_DIR=$(CYGROOT)/Progra~1/Inno Setup 4 ISS_DIR=$(CYGROOT)/Progra~1/Inno Setup 4
ISS_COMPILER=$(ISS_DIR)/Compil32.exe ISS_COMPILER=$(ISS_DIR)/Compil32.exe
# We need a version that understands cygwin paths, so /bin/
UNZIP=/bin/unzip
$(REQUIRED_FILES): $(REQUIRED_FILES):
if [ -z "$(BASE_DIR)/$@" ]; then echo. &echo. & echo \ if [ -z "$(BASE_DIR)/$@" ]; then echo. &echo. & echo \
......
# The Python and win32all versions. For Python, both the source tarball # The Python and pywin32 versions. For Python, both the source tarball
# and the Windows installer must be in tmp/. For win32all, the Windows # and the Windows installer must be in tmp/. For pywin32 (previously known
# installer must be in tmp/. Nothing beyond those is required to # as win32all), the Windows installer must be in tmp/. Nothing beyond those
# build Python, and you don't even need a compiler for this part. # is required to build Python, and you don't even need a compiler.
PYVERSION=2.3.5 PYVERSION_MAJOR=2
W32ALLVERSION=163 PYVERSION_MINOR=3
PYVERSION_PATCH=5
PYVERSION=$(PYVERSION_MAJOR).$(PYVERSION_MINOR).$(PYVERSION_PATCH)
W32ALLVERSION=204
# CAUTION: Extracting files from Wise installers doesn't really do what # CAUTION: Extracting files from Wise installers doesn't really do what
# you expect. While a Wise installer is a zip file, the zip file # you expect. While a Wise installer is a zip file, the zip file
...@@ -21,16 +24,18 @@ W32ALLVERSION=163 ...@@ -21,16 +24,18 @@ W32ALLVERSION=163
# use the Python source tarball to get all the non-executable parts we # use the Python source tarball to get all the non-executable parts we
# need. # need.
# #
# For win32all, I'm not sure what all the consequences are. Zope has # pywin32 doesn't have this problem as it now uses
# gotten away with it so far. Favoring it, Zope makes little use of # a standard distutils 'bdist_wininst' installation .exe. These executables are
# win32all. Against it, there's (as of the time of this writing) little # valid .zip files with a "PLATLIB" directory being the complete directory
# field experience with Windows Zope after Python 2.1. Python and # structure as installed into "site-packages". These recent pywin32 builds have
# win32all have both gotten hairier since then, and win32all has # no dependencies on registry settings etc so will work directly as copied out of
# significant package structure with many instances of files with the # the .exe. The only concerns are the pywintypes/pythoncom dlls, which is
# same name in different subtrees. For now it's poke-and-hope. # handled by the Inno installer
PYDIRNAME=Python-$(PYVERSION) PYDIRNAME=Python-$(PYVERSION)
W32ALLDIRNAME=win32all-$(W32ALLVERSION) # Standard bdist_wininst name - eg: pywin32-203.win32-py2.3[.exe]
W32ALLDIRNAME=pywin32-$(W32ALLVERSION).win32-py$(PYVERSION_MAJOR).$(PYVERSION_MINOR)
W32EXCLUDE=*.chm
# The Python tarball is extracted to PYSRCDIR. # The Python tarball is extracted to PYSRCDIR.
# The contents of the Python installer get extracted to PYEXTRACTDIR. # The contents of the Python installer get extracted to PYEXTRACTDIR.
...@@ -51,7 +56,7 @@ PYTHON_REQUIRED_FILES=tmp/$(W32ALLDIRNAME).exe \ ...@@ -51,7 +56,7 @@ PYTHON_REQUIRED_FILES=tmp/$(W32ALLDIRNAME).exe \
# targets to force them to get unpacked. # targets to force them to get unpacked.
ARB_PYSRCDIR=$(PYSRCDIR)/PCbuild/pcbuild.dsw ARB_PYSRCDIR=$(PYSRCDIR)/PCbuild/pcbuild.dsw
ARB_PYEXTRACTDIR=$(PYEXTRACTDIR)/zlib.pyd ARB_PYEXTRACTDIR=$(PYEXTRACTDIR)/zlib.pyd
ARB_W32EXTRACTDIR=$(W32EXTRACTDIR)/readme.txt ARB_W32EXTRACTDIR=$(W32EXTRACTDIR)/PLATLIB
# Building Python just consists of extracting files. # Building Python just consists of extracting files.
build_python: $(ARB_PYSRCDIR) $(ARB_PYEXTRACTDIR) $(ARB_W32EXTRACTDIR) build_python: $(ARB_PYSRCDIR) $(ARB_PYEXTRACTDIR) $(ARB_W32EXTRACTDIR)
...@@ -77,9 +82,11 @@ $(ARB_PYEXTRACTDIR): tmp/$(PYDIRNAME).exe ...@@ -77,9 +82,11 @@ $(ARB_PYEXTRACTDIR): tmp/$(PYDIRNAME).exe
"tmp/$(PYDIRNAME).exe" /S /X "$(WIN_PYEXTRACTDIR)" "tmp/$(PYDIRNAME).exe" /S /X "$(WIN_PYEXTRACTDIR)"
$(TOUCH) "$(ARB_PYEXTRACTDIR)" $(TOUCH) "$(ARB_PYEXTRACTDIR)"
# unzip warns about .exe not being exactly a .zip, then succeeds in
# extracting the files, then returns with exit != 0 - ignore exit code
$(ARB_W32EXTRACTDIR): tmp/$(W32ALLDIRNAME).exe $(ARB_W32EXTRACTDIR): tmp/$(W32ALLDIRNAME).exe
$(MKDIR) "$(W32EXTRACTDIR)" -$(UNZIP) -o "-d$(W32EXTRACTDIR)" "tmp/$(W32ALLDIRNAME).exe"
"tmp/$(W32ALLDIRNAME).exe" /S /X "$(WIN_W32EXTRACTDIR)" cd "$(WIN_W32EXTRACTDIR)\PLATLIB" ; $(RMRF) $(W32EXCLUDE)
$(TOUCH) "$(ARB_W32EXTRACTDIR)" $(TOUCH) "$(ARB_W32EXTRACTDIR)"
$(BUILD_DIR)/bin/python.exe: $(BUILD_DIR)/bin/python.exe:
...@@ -89,8 +96,6 @@ $(BUILD_DIR)/bin/python.exe: ...@@ -89,8 +96,6 @@ $(BUILD_DIR)/bin/python.exe:
$(CP) "$(MAKEFILEDIR)/doc/ZC_PY_DIST_README.txt" "$(BUILD_DIR)/doc" $(CP) "$(MAKEFILEDIR)/doc/ZC_PY_DIST_README.txt" "$(BUILD_DIR)/doc"
$(CP) "$(PYSRCDIR)/LICENSE" "$(BUILD_DIR)/doc/PYTHON_LICENSE.txt" $(CP) "$(PYSRCDIR)/LICENSE" "$(BUILD_DIR)/doc/PYTHON_LICENSE.txt"
unix2dos "$(BUILD_DIR)/doc/PYTHON_LICENSE.txt" unix2dos "$(BUILD_DIR)/doc/PYTHON_LICENSE.txt"
$(CP) "$(SRC_DIR)/$(W32ALLDIRNAME)/License.txt" \
"$(BUILD_DIR)/doc/WIN32ALL_LICENSE.txt"
$(MKDIR) "$(BUILD_DIR)/bin/DLLs" $(MKDIR) "$(BUILD_DIR)/bin/DLLs"
$(XCOPY) "$(WIN_PYEXTRACTDIR)\*.pyd" "$(WIN_BUILD_DIR)\bin\DLLs" $(XCOPY) "$(WIN_PYEXTRACTDIR)\*.pyd" "$(WIN_BUILD_DIR)\bin\DLLs"
...@@ -100,13 +105,7 @@ $(BUILD_DIR)/bin/python.exe: ...@@ -100,13 +105,7 @@ $(BUILD_DIR)/bin/python.exe:
$(MKDIR) "$(BUILD_DIR)/bin/Lib/site-packages" $(MKDIR) "$(BUILD_DIR)/bin/Lib/site-packages"
$(CP) "$(PYSRCDIR)/Lib/site-packages/README" \ $(CP) "$(PYSRCDIR)/Lib/site-packages/README" \
"$(BUILD_DIR)/bin/Lib/site-packages" "$(BUILD_DIR)/bin/Lib/site-packages"
$(XCOPY) "$(WIN_W32EXTRACTDIR)\*.pyd" \ $(XCOPY) "$(WIN_W32EXTRACTDIR)\PLATLIB" \
"$(WIN_BUILD_DIR)\bin\Lib\site-packages"
$(XCOPY) "$(WIN_W32EXTRACTDIR)\*.dll" \
"$(WIN_BUILD_DIR)\bin\Lib\site-packages"
$(XCOPY) "$(WIN_W32EXTRACTDIR)\*.exe" \
"$(WIN_BUILD_DIR)\bin\Lib\site-packages"
$(XCOPY) "$(WIN_W32EXTRACTDIR)\*.py" \
"$(WIN_BUILD_DIR)\bin\Lib\site-packages" "$(WIN_BUILD_DIR)\bin\Lib\site-packages"
$(CP) "$(MAKEFILEDIR)/etc/sitecustomize.py" \ $(CP) "$(MAKEFILEDIR)/etc/sitecustomize.py" \
......
...@@ -16,7 +16,8 @@ test_zope: ...@@ -16,7 +16,8 @@ test_zope:
clean_zope: clean_zope:
$(RMRF) src/$(ZOPEDIRNAME) $(RMRF) src/$(ZOPEDIRNAME)
install_zope: src/$(ZOPEDIRNAME)/inst/configure.py install_python \ install_zope: src/$(ZOPEDIRNAME)/inst/configure.py \
$(BUILD_DIR)/lib/python/version.txt install_python \
$(BUILD_DIR)/Zope-$(ZOPEVERSION)-win32.exe $(BUILD_DIR)/Zope-$(ZOPEVERSION)-win32.exe
ESCAPED=$(shell sh $(MAKEFILEDIR)/bin/escape.sh '$(WIN_MAKEFILEDIR)') ESCAPED=$(shell sh $(MAKEFILEDIR)/bin/escape.sh '$(WIN_MAKEFILEDIR)')
......
...@@ -95,16 +95,29 @@ PYTHONSERVICE_EXE=r'%s\bin\PythonService.exe' % ZEO_HOME ...@@ -95,16 +95,29 @@ PYTHONSERVICE_EXE=r'%s\bin\PythonService.exe' % ZEO_HOME
sys.path.insert(0, SOFTWARE_HOME) sys.path.insert(0, SOFTWARE_HOME)
# Setup the environment, so sub-processes see these variables
os.environ["PYTHONPATH"] = os.environ.get("PYTHONPATH", "") + ";" + SOFTWARE_HOME
os.environ["INSTANCE_HOME"] = INSTANCE_HOME
from nt_svcutils import service from nt_svcutils import service
servicename = 'ZEO_%s' % str(hash(INSTANCE_HOME)) servicename = 'ZEO_%s' % str(hash(INSTANCE_HOME.lower()))
class InstanceService(service.Service): class InstanceService(service.Service):
start_cmd = '"%s" "%s" -C "%s"' % (PYTHON, ZEO_RUN, CONFIG_FILE) start_cmd = '"%s" "%s" -C "%s"' % (PYTHON, ZEO_RUN, CONFIG_FILE)
_svc_name_ = servicename _svc_name_ = servicename
_svc_display_name_ = 'ZEO instance at %s' % INSTANCE_HOME _svc_display_name_ = 'ZEO instance at %s' % INSTANCE_HOME
# If the exe we expect is not there, let the service framework search
# for it. This will be true for people running from source builds and
# relying on pre-installed pythonservice.exe.
# Note this is only used at install time, not runtime.
if os.path.isfile(PYTHONSERVICE_EXE):
_exe_name_ = PYTHONSERVICE_EXE _exe_name_ = PYTHONSERVICE_EXE
process_runner = PYTHON
process_args = '"%s" -C "%s"' % (ZOPE_RUN, CONFIG_FILE)
evtlog_name = 'ZEO'
if __name__ == '__main__': if __name__ == '__main__':
import win32serviceutil import win32serviceutil
win32serviceutil.HandleCommandLine(InstanceService) win32serviceutil.HandleCommandLine(InstanceService)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment