Pagina 1 di 1

Registrazione OCX

Pubblicato: 8 marzo 2018 - 09:47
dall'Idaho
Ciao a tutti,

Ho installato WAPT nel mio ambiente aziendale per installare software da remoto e sono abbastanza soddisfatto. Il mio obiettivo è creare pacchetti per tutti i software che utilizziamo; tuttavia, ce ne sono molti e alcuni sono impacchettati in modo pessimo. Attualmente sto preparando un pacchetto per SRIM 2013 ( http://www.srim.org/SRIM/SRIMLEGL.htm Il software non ha un programma di installazione, ma richiede comunque la registrazione dei file OCX, l'installazione delle DLL e di un font per funzionare correttamente. Ho trovato soluzioni per il font e le DLL, ma la registrazione dei file OCX – non so perché – non funziona con il comando `Regsvr32 /s`. Quindi scrivo qui per vedere se qualcun altro ha riscontrato lo stesso problema con la registrazione dei file OCX e se ha una soluzione. Il mio software si avvia, ma alcune funzioni si rifiutano di funzionare perché i file OCX non sono presenti



- Installata la versione WAPT 1.3.13
- Sistema operativo del server: Linux Debian 9
- Sistema operativo della macchina di amministrazione/creazione pacchetti: Windows 7

Sto testando il seguente codice, che non funziona. Ho posizionato correttamente i file OCX nella directory principale del pacchetto e in precedenza ho anche testato il comando Regsvr32 da solo, senza successo. :/

Codice: Seleziona tutto

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')
Il codice per lo script di installazione (se sto creando un collegamento da solo e non utilizzo la funzione fornita da WAPT, è perché ricevevo un errore quando avviavo il software che non riscontro quando lo faccio in questo modo; in realtà non capisco perché):

Codice: Seleziona tutto

@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
Il codice per lo script di aggiunta dei font che ho trovato online esegue una scansione della directory e aggiunge automaticamente i file dei font in essa contenuti (peccato che non esista la stessa cosa per quei maledetti file OCX). Lo pubblico qui principalmente perché potrebbe essere utile a chi vuole creare pacchetti per installare i font:

Codice: Seleziona tutto

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
Infine, ecco il contenuto della directory del pacchetto:

Codice: Seleziona tutto

 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
Grazie in anticipo per le vostre risposte :)

Re: Registrazione OCX

Pubblicato: 9 marzo 2018 - 16:47
di htouvet
Il problema è molto probabilmente legato alla riscrittura automatica dei percorsi di sistema da parte di Windows nel caso di un'app a 32 bit su un sistema Windows a 64 bit.

WAPT è a 32 bit, quindi per impostazione predefinita Windows presenta una "visualizzazione" del sistema a 32 bit.
Per disattivare il reindirizzamento, è necessario utilizzare l'helper di contesto

Codice: Seleziona tutto

disable_file_system_redirection

Codice: Seleziona tutto

def install():
    with disable_file_system_redirection():
        run(r'...')
Per registrare i file OCX, deve funzionare la funzione register_dll() di setuphelpers

Codice: Seleziona tutto

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'))