Seite 1 von 1

OCX-Registrierung

Veröffentlicht: 8. März 2018 - 09:47 Uhr
von Idaho
Hallo zusammen,

Ich habe WAPT in meiner Firmenumgebung installiert, um Software remote zu installieren, und bin sehr zufrieden. Mein Ziel ist es, Pakete für die gesamte von uns verwendete Software zu erstellen; allerdings gibt es sehr viele Programme, und einige sind sehr schlecht verpackt. Derzeit bereite ich ein Paket für SRIM 2013 vor ( http://www.srim.org/SRIM/SRIMLEGL.htm Die Software hat keinen Installer, benötigt aber dennoch registrierte OCX-Dateien, installierte DLLs und eine Schriftart, um korrekt zu funktionieren. Ich habe Lösungen für die Schriftart und die DLLs gefunden, aber die Registrierung der OCX-Dateien funktioniert – aus unbekannten Gründen – nicht mit dem Befehl `Regsvr32 /s`. Daher wende ich mich an Sie, um zu erfahren, ob jemand anderes das gleiche Problem mit der Registrierung von OCX-Dateien hatte und eine Lösung kennt. Meine Software startet zwar, aber einige Funktionen lassen sich aufgrund der fehlenden OCX-Dateien nicht ausführen



- WAPT Version 1.3.13 installiert
- Server-Betriebssystem: Linux Debian 9
- Betriebssystem des Administrations-/Paketerstellungsrechners: Windows 7

Ich teste folgenden Code, der leider nicht funktioniert. Die OCX-Dateien befinden sich korrekt im Stammverzeichnis des Pakets. Ich habe auch zuvor den Befehl Regsvr32 separat getestet, allerdings ohne Erfolg. :/

Code: Alle auswählen

r# -*- coding: utf-8 -*-
from setuphelpers import *

uninstallkey = []

targetdir = makepath(programfiles64,'SRIM 2013')
exename = 'SRIM.exe'

def install():
    print('installing pgip-srim2013')
    run(r'install.cmd')
    run(r'IF EXIST C:\Windows\SysWOW64 (C:\Windows\SysWOW64\regsvr32.exe /S COMCTL32.OCX) ELSE (C:\Windows\System32\regsvr32.exe  /S COMCTL32.OCX)')
    run(r'IF EXIST C:\Windows\SysWOW64 (C:\Windows\SysWOW64\regsvr32.exe /S COMDLG32.OCX) ELSE (C:\Windows\System32\regsvr32.exe /S COMDLG32.OCX)')
    run(r'IF EXIST C:\Windows\SysWOW64 (C:\Windows\SysWOW64\regsvr32.exe /S MSFLXGRD.OCX) ELSE (C:\Windows\System32\regsvr32.exe /S MSFLXGRD.OCX)')
    run(r'IF EXIST C:\Windows\SysWOW64 (C:\Windows\SysWOW64\regsvr32.exe /S TABCTL32.OCX) ELSE (C:\Windows\System32\regsvr32.exe /S TABCTL32.OCX)')
    run (r'IF EXIST C:\Windows\SysWOW64 (C:\Windows\SysWOW64\regsvr32.exe /S  RICHTX32.OCX) ELSE (C:\Windows\System32\regsvr32.exe /S RICHTX32.OCX)')
    register_windows_uninstall(control)

def uninstall():
    print('uninstalling pgip-srim2013')
    killalltasks(exename)
    killalltasks('SR.exe')
    if isdir(targetdir):
        remove_tree(targetdir)
    remove_file(r'C:\ProgramData\Microsoft\Windows\Start Menu\Programs\SRIM 2013.lnk')
    unregister_uninstall('pgip-srim2013')
Der Code für das Installationsskript (falls ich selbst eine Verknüpfung erstelle und nicht die von WAPT bereitgestellte Funktion verwende, liegt das daran, dass beim Starten der Software ein Fehler auftrat, der bei dieser Vorgehensweise nicht auftritt; ich verstehe ehrlich gesagt nicht, warum):

Code: Alle auswählen

@ECHO OFF
ECHO INSTALLING SRIM 2013
xcopy SRIM_2013 "C:\Program Files\SRIM 2013" /S /I
CLS
xcopy "SRIM 2013.lnk" "C:\ProgramData\Microsoft\Windows\Start Menu\Programs" /S /I
CLS
ECHO ADDING FONTS
addfonts.cmd
CLS
ECHO DONE
Der Code für das Schriftarten-Hinzufügeskript, den ich online gefunden habe, durchsucht im Grunde das Verzeichnis und fügt die darin enthaltenen Schriftartdateien im Hintergrund hinzu (schade, dass es so etwas nicht auch für diese verdammten OCX-Dateien gibt). Ich poste ihn hier hauptsächlich, weil er vielleicht einigen Leuten helfen könnte, die Pakete zur Installation von Schriftarten erstellen möchten

Code: Alle auswählen

REM http://www.msfn.org/board/topic/119612-how-to-install-a-font-via-the-command-line/

@ECHO OFF
TITLE Adding Fonts..
REM Filename: ADD_Fonts.cmd
REM Script to ADD TrueType and OpenType Fonts for Windows
REM By Islam Adel
REM 2012-01-16

REM How to use:
REM Place the batch file inside the folder of the font files OR:
REM Optional Add source folder as parameter with ending backslash and dont use quotes, spaces are allowed
REM example "ADD_fonts.cmd" C:\Folder 1\Folder 2\

IF NOT "%*"=="" SET SRC=%*
ECHO.
ECHO Adding Fonts..
ECHO.
FOR /F %%i in ('dir /b "%SRC%*.*tf"') DO CALL :FONT %%i
REM OPTIONAL REBOOT
REM shutdown -r -f -t 10 -c "Reboot required for Fonts installation"
ECHO.
ECHO Done!
EXIT

:FONT
ECHO.
REM ECHO FILE=%~f1
SET FFILE=%~n1%~x1
SET FNAME=%~n1
SET FNAME=%FNAME:-= %
IF "%~x1"==".otf" SET FTYPE=(OpenType)
IF "%~x1"==".ttf" SET FTYPE=(TrueType)

ECHO FILE=%FFILE%
ECHO NAME=%FNAME%
ECHO TYPE=%FTYPE%

COPY /Y "%SRC%%~n1%~x1" "%SystemRoot%\Fonts\"
reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" /v "%FNAME% %FTYPE%" /t REG_SZ /d "%FFILE%" /f
GOTO :EOF
Abschließend folgt hier der Inhalt des Paketverzeichnisses:

Code: Alle auswählen

 Répertoire de C:\waptdev\pgip-srim2013-wapt

08/03/2018  10:24    <REP>          .
08/03/2018  10:24    <REP>          ..
06/03/2018  15:53             1ÿ133 addfonts.cmd
23/05/2000  00:58           608ÿ448 ComCtl32.ocx
23/05/2000  00:58           140ÿ488 ComDlg32.ocx
08/03/2018  09:55               255 install.cmd
20/03/1996  06:00            80ÿ008 Linedraw.ttf
22/05/2000  22:58           244ÿ416 MSFlxGrd.ocx
09/03/2004  23:45           212ÿ240 RichTx32.ocx
07/03/2018  10:56             1ÿ322 setup.py
07/03/2018  10:57             1ÿ767 setup.pyc
06/03/2018  16:58             1ÿ331 SRIM 2013.lnk
06/03/2018  14:28    <REP>          SRIM_2013
30/08/2001  22:43           209ÿ192 TabCtl32.ocx
07/03/2018  08:48    <REP>          WAPT
              11 fichier(s)        1ÿ500ÿ600 octets
               4 R‚p(s)   1ÿ215ÿ844ÿ352 octets libres
Vielen Dank im Voraus für Ihre Antworten :)

Betreff: OCX-Registrierung

Veröffentlicht: 9. März 2018 – 16:47 Uhr
von htouvet
Das Problem hängt höchstwahrscheinlich mit der automatischen Umschreibung von Systempfaden durch Windows im Falle einer 32-Bit-Anwendung auf einem 64-Bit-Windows-System zusammen.

WAPT ist 32-Bit, daher präsentiert Windows standardmäßig eine 32-Bit-„Sicht“ des Systems.
Um die Umleitung zu deaktivieren, müssen Sie den Kontext-Helper verwenden

Code: Alle auswählen

disable_file_system_redirection

Code: Alle auswählen

def install():
    with disable_file_system_redirection():
        run(r'...')
Damit OCX-Dateien registriert werden können, muss die setuphelpers-Funktion register_dll() funktionieren

Code: Alle auswählen

import winshell

def install():
    filecopyto('MY.OCX',makepath(winshell.get_folder_by_name('SYSTEMX86'),'MY.OCX'))
    register_dll(makepath(winshell.get_folder_by_name('SYSTEMX86'),'MY.OCX'))