INSTALAR DLL AUTOMATICAMENTE
Citação::
colega tem como você postar o sript do inno setup que você cria, pode ser alguma coisa nele
Marcelo,
Em anexo o script do programa, porém o problema é o componente que não está presente no win 7 em diante....
Citação::
:
:
sobre win7 e win8, lembrando que desta maneira que voce citou, se o SO for 64 bits, a pasta de destino das DLLs e OCXs, não é system32 e sim a syswow64. è pra onde vão os arquivos de 32 bits que trabalham em modo de compatibilidade com 64 bits.
Isso mesmo, neste caso terei que criar duas versões do programa
De onde você tirou a ideia que precisa de duas versões do programa? VB6 só cria programas de 32 bits, mas eles rodam no Windows de 64 bits geralmente sem problemas.
E como já falaram, poste seu script do inno setup, pelo menos a parte referente aos arquivos que estão dando problema, pois é muito provável que o problema esteja nele, já que ele deveria registrar os componentes sem problema nenhum
Já postei o script, e quanto a criar 2 versões, bem, perdoe a minha ignorância pois eu imaginei que teria que criar um com o comando [txt-color=#0000f0]filecopy(origem/destino)[/txt-color] (como sitou o amigo Nilson) para cada pasta, system32 e a syswow64.
Uma das formas é,
Imports System.IO
if Directory.Exists(c:\Windows\syswow64) then
64
else
32
end if
Citação:Já postei o script, e quanto a criar 2 versões, bem, perdoe a minha ignorância pois eu imaginei que teria que criar um com o comando [txt-color=#0000f0]filecopy(origem/destino)[/txt-color] (como sitou o amigo Nilson) para cada pasta, system32 e a syswow64.
Você não precisa de dois programas pois não vai conseguir copiar arquivos para a pasta System32, o Windows é esperto, ele sabe que programas de 32 bits esperavam que a pasta System32 e a Arquivos de Programas fossem ser usadas por programas que não sabem que existe um sistema operacional de 64 bits, então sempre que um programa de 32 bits rodando em um Windows de 64 bits tenta acessar estas pastas eles são redirecionados para as pastas SysWOW64 e Arquivos de Programas (x86), a não ser que o seu programa diga para o Windows que está ciente de que o SO é de 64 bits e ele mesmo vai usar a pasta correta,o que geralmente não é necessário.
E eu diria que seu script de instalação está errado, você não deveria colocar isso
Source: [Ô]C:\Users\Mario\Dropbox\Files\Dll\*[Ô]; DestDir: [Ô]{app}[Ô]; Flags: ignoreversion recursesubdirs createallsubdirs
O correto seria você colocar cada DLL necessária separadamente, não colocar a flag ignoreversion, pois assim ele instalaria apenas se for uma versão mais nova que a existente, os arquivos que devem ir no System32 deveriam estar com o DestDir: [Ô]{Sys}[Ô] e as DLLs que precisam ser registradas deveriam ter a flag regserver
Citação::
Já postei o script, e quanto a criar 2 versões, bem, perdoe a minha ignorância pois eu imaginei que teria que criar um com o comando [txt-color=#0000f0]filecopy(origem/destino)[/txt-color] (como sitou o amigo Nilson) para cada pasta, system32 e a syswow64.
Você não precisa de dois programas pois não vai conseguir copiar arquivos para a pasta System32, o Windows é esperto, ele sabe que programas de 32 bits esperavam que a pasta System32 e a Arquivos de Programas fossem ser usadas por programas que não sabem que existe um sistema operacional de 64 bits, então sempre que um programa de 32 bits rodando em um Windows de 64 bits tenta acessar estas pastas eles são redirecionados para as pastas SysWOW64 e Arquivos de Programas (x86), a não ser que o seu programa diga para o Windows que está ciente de que o SO é de 64 bits e ele mesmo vai usar a pasta correta,o que geralmente não é necessário.
E eu diria que seu script de instalação está errado, você não deveria colocar isso
Source: [Ô]C:UsersMarioDropboxFilesDll*[Ô]; DestDir: [Ô]{app}[Ô]; Flags: ignoreversion recursesubdirs createallsubdirs
O correto seria você colocar cada DLL necessária separadamente, não colocar a flag ignoreversion, pois assim ele instalaria apenas se for uma versão mais nova que a existente, os arquivos que devem ir no System32 deveriam estar com o DestDir: [Ô]{Sys}[Ô] e as DLLs que precisam ser registradas deveriam ter a flag regserver
Essas dll's eu coloco na pasta para que quando o programa seja instalado eu as pegue e jogue na pasta system32 (manualmente) , como disse no inicio do post, eu quero apenas que seja copiado para lá de forma automática, depois rodar o comando para registra-las , esse é o camando que tenho que executar no prompt de comando [Ô]regsvr32 COMDLG32.ocx[Ô] , tenho que fazer isso 4 vezes, uma para cada dll, sei que existe um geito de fazer isso automaticamente, só não sei como.....
Primeiro para saber quais dll's e ocx's deve-se incluir em seu instalador e quais terá de registrar faça da seguinte forma:
primeiro crieum instalador normalmente utilizando o Package & Deployment Wizard do Visual Studio
para isto caso não saiba vá em INICIAR / MICROSOFT VISUAL STUDIO 6.0 / MICROSOFT VISUAL STUDIO 6.0 TOOLS / PACKAGE & DEPLOYMENT WIZARD, e siga as instruções
Feito isso va na pasta Onde foi criado o instalador ( no meu caso o nome é Package) e abra o arquivo setup.lst com o Word ou até com bloco de notas, neste arquivo contem a lista de todas as dll's que seu programa vai precisar e quais devem ser registradas.
eis um exemplo retirado do setup.lst do instalador que criei:
Citação:[Bootstrap Files]
File1=@VB6STKIT.DLL,$(WinSysPathSysFile),,,7/15/00 12:00:00 AM,101888,6.0.84.50
File2=@COMCAT.DLL,$(WinSysPathSysFile),$(DLLSelfRegister),,5/31/98 12:00:00 AM,22288,4.71.1460.1
File3=@STDOLE2.TLB,$(WinSysPathSysFile),$(TLBRegister),,6/3/99 12:00:00 AM,17920,2.40.4275.1
File4=@ASYCFILT.DLL,$(WinSysPathSysFile),,,3/8/99 12:00:00 AM,147728,2.40.4275.1
File5=@OLEPRO32.DLL,$(WinSysPathSysFile),$(DLLSelfRegister),,3/8/99 12:00:00 AM,164112,5.0.4275.1
File6=@OLEAUT32.DLL,$(WinSysPathSysFile),$(DLLSelfRegister),,4/12/00 12:00:00 AM,598288,2.40.4275.1
File7=@msvbvm60.dll,$(WinSysPathSysFile),$(DLLSelfRegister),,2/23/04 12:00:00 AM,1386496,6.0.97.82
imprima o conteudo para depois você poder fazer as alterações no seu instalador Inno Setup
Agora você inicializa seu instaldor Inno Setup , e ao chegar na parte chamada Application Files clique no botão Add File(s)... vá até a pasta onde você criou o instalador usando o PDW e abra a pasta Support, nela estão todas as DLL's e OCX's necessárias para seu programa, selecione selecione-as e clique em abrir, ai basta você continuar a criar seu instalador até o final, ao terminar ele vai perguntar se você deseja compilar o programa e você vai selecionar não.
A seguir ira aparecer uma lista com os arquivos que foram selecionados, abaixo coloquei apenas quatro linhas para simplificar a explicação:
Citação:Source: [Ô]C:\Ultimo Instalador esteinstalador\Support\ST6UNST.EXE[Ô]; DestDir: [Ô]{app}[Ô]; Flags: ignoreversion
Source: [Ô]C:\Ultimo Instalador esteinstalador\Support\STDOLE2.TLB[Ô]; DestDir: [Ô]{app}[Ô]; Flags: ignoreversion
Source: [Ô]C:\Ultimo Instalador esteinstalador\Support\TABCTL32.OCX[Ô]; DestDir: [Ô]{app}[Ô]; Flags: ignoreversion
Source: [Ô]C:\Ultimo Instalador esteinstalador\Support\OLEPRO32.DLL[Ô]; DestDir: [Ô]{app}[Ô]; Flags: ignoreversion
bom agora vem a parte mais divertida, que é digitar veja as alterações que devem ser feitas nestas linhas
voltando lá em cima onde eu imprimi as linhas do arquivo setup.lst, onde estiver escrito DLLSelfRegister é proque esta dll deve ser registrada.
então você vai alterar a seguinte linha de:
Source: [Ô]C:\Ultimo Instalador esteinstalador\Support\OLEPRO32.DLL[Ô]; DestDir: [Ô]{app}[Ô]; Flags: ignoreversion
para:
Source: [Ô]C:\Ultimo Instalador esteinstalador\Support\OLEPRO32.DLL[Ô]; DestDir: [Ô]{sys}[Ô]; CopyMode: alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall sharedfile regserver
e assim para todas as dll's que possuem DLLSelfRegister
Agora para os arquivos com extensão .TLB deve ser feito da seguinte forma
de:
Source: [Ô]C:\Ultimo Instalador esteinstalador\Support\STDOLE2.TLB[Ô]; DestDir: [Ô]{app}[Ô]; Flags: ignoreversion
para:
Source: [Ô]C:\Ultimo Instalador esteinstalador\Support\STDOLE2.TLB[Ô]; DestDir: [Ô]{sys}[Ô]; CopyMode: alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall sharedfile regtypelib
e pronto suas dll's serão registradas ao se instalar seu programa
Apenas algumas Observações no PDW onde estãomarcadas como {WinSysPathSysFile} no Inno setup deve estar como
DestDir: [Ô]{sys}[Ô]
.agora para OCX este deve ser o código
Source: [Ô]C:\Ultimo Instalador esteinstalador\Support\TABCTL32.OCX[Ô]; DestDir: [Ô]{sys}[Ô]; CopyMode: alwaysskipifsameorolder; Flags: restartreplace sharedfile regserver
e assim por diante
Espero que eu tenha esclarecido suas duvidas, pois se vocês seguirem estes passos, o problema quanto a instaladores, acabará, lembrando que estou ensinando a localizar as dll's e Ocx's e registrar estas, e não como utilizar o inno setup
Vou tentar deixar claro aqui, você não vai conseguir fazer isso. Isso dai só vai funcionar se o usuário não tiver o UAC ativado, sendo que ter o UAC ativado deve ser considerado como regra, UAC desativado é exceção e pode ser desconsiderado. Pior ainda é se for um usuário que nem mesmo permissão de administrador tem, o que também deve ser considerado que pode acontecer.
Então ou você faz corretamente através do instalador ou continua fazendo manualmente, pelo seu programa não vai funcionar por padrão a partir do Windows Vista se ele não rodar como administrador, o que provavelmente não deve ser necessário e deve-se considerar como não sendo uma opção.
Vou tentar aqui e te falo, mas desde já valeu mesmo pela força....
Belo Tutorial !, vai servir até para min, pois desde que migrei para vb.net não crio instaladores, instalo manualmente porque cansei de na época de vb6, ter problemas com instaladores, mas confesso que as vezes faz falta, e eu havia até esquecido como se cria um bom instalador.
E já aproveitando, em que pé esta o Inno Setup ? em qual versão e ou onde Tem algum linque ou local para download ?
Abusei agora ?, rsrsrs.
Abraço.
você pode encontrar o inno setup, no site http://www.jrsoftware.org/
e aqui é o link direto para baixa-lo
http://www.jrsoftware.org/download.php/is.exe