Clipper On Line • Ver Tópico - Gravando/Registrando DLLs pelo aplicativo

Gravando/Registrando DLLs pelo aplicativo

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Gravando/Registrando DLLs pelo aplicativo

Mensagempor JoséQuintas » 26 Jun 2020 01:26

Resolvi assim.
11MB pra imagem... mais 4MB pra componentes não é problema.

PROCEDURE PSETUPCapicom

   ShellExecuteRunAs( hb_ProgName(), "/capicom" )

   RETURN

FUNCTION InstalaCapicom()

   LOCAL cPath := "c:\windows\system32\"

   IF Len( Directory( "c:\windows\syswow64\*.*" ) ) != 0
      cPath := "c:\windows\syswow64\"
   ENDIF
   hb_MemoWrit( cPath + "capicom.dll", ze_RawImage( "CAPICOM.DLL" ) )
   hb_MemoWrit( cPath + "msxml5.dll",  ze_RawImage( "MSXML5.DLL" ) )
   hb_MemoWrit( cPath + "msxml5r.dll", ze_RawImage( "MSXML5R.DLL" ) )
   RUN ( cPath + "regsvr32.exe " + cPath + "capicom.dll" )
   RUN ( cPath + "regsvr32.exe " + cPath + "msxml5.dll" )

   RETURN NIL


FUNCTION ShellExecuteRunAs( cFileName, cParameters, nShow )

   wapi_ShellExecute( NIL, "RunAs", cFileName, cParameters,, hb_DefaultValue( nShow, WIN_SW_SHOWNORMAL ) )

   RETURN NIL


PROCEDURE Main

   PARAMETERS cParam
   LOCAL xParam, nThreads := 2, cPath, oExeList

   Set( _SET_CODEPAGE, "PTISO" )
   cPath := hb_FNameDir( hb_ProgName() )
   IF cParam != NIL
      IF "/capicom" $ cParam
         InstalaCapicom()
         QUIT
      ENDIF
   ENDIF


25/06/2020  18:02         3.181.437 ze_resource.o
25/06/2020  18:02        11.119.650 jpa.reso
25/06/2020  18:02         6.544.816 jpa.exe


autoriza.jpg
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Gravando/Registrando DLLs pelo aplicativo

Mensagempor JoséQuintas » 06 Jul 2020 19:16

Só faltou a de resource:

FUNCTION ze_RawImage( cImage, lObrigatorio )

   hb_Default( @lObrigatorio, .F. )
   IF ! lObrigatorio
      hb_Default( @cImage, AppEmpresaApelido() )
   ENDIF
   IF ValType( cImage ) == "C"
      cImage := Upper( cImage )
   ENDIF
   DO CASE
   CASE cImage == "CAPICOM.DLL"                                 ; #pragma __binarystreaminclude "resource\capicom.dll"     | RETURN %s
   CASE cImage == "MSXML5.DLL"                                  ; #pragma __binarystreaminclude "resource\msxml5.dll"      | RETURN %s
   CASE cImage == "MSXML5R.DLL"                                 ; #pragma __binarystreaminclude "resource\msxml5r.dll"     | RETURN %s
   CASE cImage == "RMCHART.DLL"                                 ; #pragma __binarystreaminclude "resource\rmchart.dll"     | RETURN %s
   CASE File( "logotipo.jpg" ) .AND. ! lObrigatorio ; RETURN MemoRead( "logotipo.jpg" )
   ENDCASE

   RETURN NIL


Nota:
Aonde aceita diretamente o formato raw, pego daí, o fonte retorna o conteúdo do arquivo.
Em outros casos, uso o resource normal.

Repetindo o post anterior, mas chamando atenção aos detalhes:
25/06/2020  18:02         3.181.437 ze_resource.o
25/06/2020  18:02        11.119.650 jpa.reso
25/06/2020  18:02         6.544.816 jpa.exe


o ze_resource é o fonte acima, compilado (tem mais coisas além do que postei).
o jpa.reso é o arquivo RC, resource normal com ícones e manifest, compilado
Um não tem nada a ver com o outro.
e o EXE é só pra dar uma idéia do tamanho final.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Gravando/Registrando DLLs pelo aplicativo

Mensagempor JoséQuintas » 07 Jul 2020 11:14

E faltou uma explicação adicional:

O aplicativo roda sempre igual ao usuário.

Ao chamar a rotina de setup, ele usa a opção "RunAs", pra rodar como administrador, e chama a si próprio passando /capicom
Na chamada, ao detectar /capicom, ele instala e registra.
NÃO precisa nada adicional, porque certamente ele está rodando como administrador e pode fazer isso.

Importante:

- NÃO sei se funciona pra fazer o mesmo com OCX
- Antivírus alerta como VIRUS, se um EXE precisar direitos de administrador e não for ASSINADO, por isso é importante o manifest com direitos limitados.
E sem manifest, acaba sendo considerado como administrador também, então não tem jeito, é colocar manifest limitando direitos.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18007
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 14 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro