Renomear programa, ou seu diretório de trabalho, muda o comportamento?

0

Este é definitivamente o erro mais estranho que eu tenho batido minha cabeça em um bom tempo ...

Eu tenho um .exe extremamente simples no Windows 10 que eu mesmo compilei usando o MSVC e a biblioteca Allegro (que usa o DirectX). A fonte está abaixo, caso os detalhes sejam de alguma forma importantes, mas a essência é:

  • O DirectDraw lança um erro de tempo de execução quando executo o código.
  • Se eu renomear o executável, o erro desaparece e o programa é executado com êxito.
  • Se eu mover o executável para uma pasta diferente ou renomear a pasta, o programa será executado com êxito.
  • Se eu renomear o executável / pasta de volta para seus nomes originais, o erro retornará.

Não há outros arquivos na pasta. A única coisa em que consigo pensar é que o Windows está de alguma forma procurando o caminho absoluto do executável e se comportando de maneira diferente dependendo desse valor (armazenando algumas informações de compatibilidade?)

Alguma ideia do que está acontecendo? Na prática, posso simplesmente renomear o executável e continuar o meu dia, mas agora estou realmente curioso sobre por que esse comportamento está acontecendo ...

PS: O código é exatamente o seguinte, usando a biblioteca Allegro 4.4.

#include "allegro.h"
int main(int argc, char **argv)
{
    allegro_init();
    set_color_depth(8);
    set_gfx_mode(GFX_AUTODETECT_FULLSCREEN, 640, 480, 0, 0);
    exit(0);
}
END_OF_MAIN()

Quando executo o código, recebo um erro (E_NOIMPL) quando tento definir o modo de vídeo.

    
por user78571 06.01.2017 / 10:28

1 resposta

0

Você deve saber que o Windows armazena o caminho completo para o programa no registro ou na área de trabalho. Se você reorganizar o nome do proggie, ou o diretório, você precisa procurar o registro para o nome do programa.

Um lugar que vale a pena olhar é uma coisa chamada APPPATHS, onde você pode criar atalhos para o programa desejado. Você faz uma cópia do write.exe e substitui a cadeia (wordpad.exe) por um nome fora de uso (por exemplo, zdirectx.exe) e cria uma entrada no registro do apppath, que lançará directx.exe quando você chame zdirectx.exe . Você pode então chamar seu programa directx.exe também.

Eu uso essa técnica para mover muitas coisas do programa para fora do caminho, mantendo o programa acessível.

    
por 06.01.2017 / 11:10