Pergunta

É possível verificar qual a versão de BPL (ie Rtl70.BPL, Indy70.bpl etc) estão instalados em um computador clientes quando o programa começa?

Eu tive alguns programas falhar porque o BPL lá computador é diferente para os que estão na máquina de compilação.
Se eu tenho que adicionar cada BPL utilizado para o instalador em cada atualização, eu acho que vai derrotar um dos pontos em usá-los.

Delphi 7, se ele faz a diferença


Apenas um acompanhamento sobre o problema que tive.
O arquivo rtl70.bpl foi apenas ligeiramente diferente entre o computador de compilação e os clientes.

Os clientes Computador: 7.0.4.453 760 KB (778,240 bytes) terça-feira 20 de agosto, 2002, 16:40:26
Desenvolver computador: 7.0.4.453 760 KB (778,240 bytes) sexta-feira 9 de agosto, 2002, 11:30:00

O atualizador eu estava usando os ignorou como sendo o mesmo (sem mudança no número de compilação), mas quando eu deletei e copiados manualmente os arquivos de cada coisa parecia trabalho.

Foi útil?

Solução

Infelizmente, não. Se o acidente é devido às importações provenientes dos arquivos .bpl exigidos pela sua aplicação em falta, não há nenhuma maneira (abreviação de reescrever a Delphi RTL ea si mesmos linker) para verificar os pacotes de dentro do bater próprio executável. A solução da PatrickvL é provavelmente o melhor para sua situação.

A solução de Neftalí pode ser uma opção - é claro, com o custo de embalagem a RTL, a duplicação de um monte de arquivos, e perder um dos pontos de ter pacotes em primeiro lugar. No entanto, se você estiver usando DLLs particulares (ou seja, se você copiar as DLLs no diretório de binários privada), então você também deve criar um arquivo vazio com o mesmo nome de seu executável, mas acrescentando a extensão .local a ele, ou seja, para notepad.exe você criar um notepad.exe.local . Veja o artigo Raymond Chen na DLL redirecionamento para mais detalhes.

Outras dicas

Se o seu programa trava, provavelmente é porque ele não pode carregar a biblioteca é ligada dinamicamente com. (Como você onde dizendo, isso acontece quando o sistema não pode encontrar uma cópia dos libaries necessários em qualquer lugar do caminho de pesquisa).

O problema é que isso acontece na inicialização de uma aplicação, que o sistema operacional Windows faz via uma API chamada MapAndLoad (também ler este ). Esta API é chamado antes de sua aplicação é sequer começou, então eu não vejo nenhuma maneira de interceptar isso.

Uma sugestão que eu poderia dar, seria usar um lançador (que tem de ser estaticamente ligado, para evitar problemas de quando há / não / bibliotecas em todos). Este lançador pode inspecionar sua aplicação real, ver o que as importações que precisa, verifica seu ambiente e apresentar uma falha simpática / solução de problemas de diálogo sugestão para o usuário.

É possível verificar qual a versão de BPL (ie Rtl70.BPL, Indy70.bpl etc) são instalados> em um computador clientes quando o programa começar? Eu tive alguns programas falhar porque o BPL lá computador é diferente para aqueles> na máquina de compilação. Se eu tenho que adicionar cada BPL utilizado para o instalador em cada atualização, eu acho que vai derrotar> um dos pontos em usá-los.

Você deve instalar a sua cópia (desenvolver) de de BPL (RTL70.bpl, INDY.BPL, ...) no mesmo diretório que você instalar o aplicativo. Sua busca primeira aplicação da BPL de no mesmo diretório e depois da busca em diretórios que estão no caminho. O ponto negativo é que o sistema irá pode ter várias cópias do mesmo BPL, o ponto positivo é que você não terá problemas com diferentes versões do mesmo arquivo.

Cumprimentos.

P.D:. Desculpa-me pelo meu mau Inglês

Você não pode fazer isso a partir de um executável que usa esses BPLS, mas você poderia ter uma pequena startup-programa que verifica a BPLS e chama o executável principal.

Às vezes Delphi acrescenta de forma automática a linha:
{$ R '* res'}
para os arquivos de projeto ou pacotes.

Comentário (//) essa linha e para compilar novamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top