Supondo que você está falando de uma aplicação desktop Windows (por ter um .exe), isso depende do que você quer fazer.
Se essas arquivos são carregados dinamicamente (ou seja, a aplicação carrega quando precisa de um caminho que ela conhece) e sua aplicação é capaz de saber em que diretório ela está rodando, você pode deixar as pastas com esses arquivos junto ao exe. A estrutrura ficaria mais ou menos assim (depois de instalado em C:\Arquivos de Programas):
- C:\Arquivos de Programas\aplicação.exe;
- C:\Arquivos de Programas\imagens\ <-- imagens vão aqui
- C:\Arquivos de Programas\xsd <-- xsd vão aqui
E, na sua aplicação, você sempre considera esses caminhos em relação à pasta que está o exe. Algo assim:
String caminhoDasImagens = funcaoQuePegaCaminhoOndeEstáOExe() + "imagens\";
Outra opção é ter, junto à sua aplicação, um arquivo ini que indica os caminhos desses arquivos. Assim, os arquivos podem estar em qualquer lugar que sua aplicação consiga ler. O arquivo ini pode ficar assim:
[paths]
imagens="C:\Users\Public\NomeDaMinhaAplicação\imagens\"
xsd="C:\Users\Public\NomeDaMinhaAplicação\xsd\"
E para ler, algo como:
String caminhoDasImagens: funcaoQueLêArquivoIni("nomedoarquivoini.ini", "paths", "imagens");
Você pode inclusive deixar isso configurável em runtime (numa tela de configuração), sendo que o setup da aplicação grava valores padrão. Em alternativa ao arquivo ini, você pode usar chaves do registro, mas eu particularmente acho desnecessário.
Tudo isso, é claro, envolve alterações no projeto e nos testes. No caso do ini, por exemplo, você não precisa se preocupar com deixar arquivos nas pastas debug/release, já que eles podem ser pegos de caminhos fora da pasta do seu projeto.
Abraço.