none
Problema ao executar Setup(Windows Service) RRS feed

  • Pergunta

  • Pessoal, estou tendo um problema ao executar o Setup, conforme abaixo.. O que pode ser?

    No meu projectInstaller deixei assim:

    public override void Install(System.Collections.IDictionary stateSaver)
            {
                base.Install(stateSaver);
    
                string targetDirectory = Context.Parameters["targetdir"];
    
                string param1 = Context.Parameters["Param1"];
    
                string param2 = Context.Parameters["Param2"];
    
                string exePath = string.Format("{0}Service.exe", targetDirectory);
    
                Configuration config = ConfigurationManager.OpenExeConfiguration(exePath);
    
                config.AppSettings.Settings["CaminhoArquivosExcel"].Value = param1;
    
                config.AppSettings.Settings["CaminhoArquivosExcelProcessados"].Value = param2;
    
                config.Save();
            }
    


     

    quarta-feira, 30 de novembro de 2011 14:04

Respostas

  • Troque /targetdir="[TARGETDIR]" por /targetdir="[TARGETDIR]\" (note a barra invertida no final) e nos reporte o que acontece.
    • Marcado como Resposta .NET Dev quinta-feira, 1 de dezembro de 2011 13:20
    quarta-feira, 30 de novembro de 2011 19:31

Todas as Respostas

  • Está dizendo que o parametro exePath é inválidol Que parametro é este?

    Você consegue debugar e ver se os valores que são recuperados?


    --
    Marque as respostas e ajude a melhorar a busca do fórum.
    quarta-feira, 30 de novembro de 2011 14:24
  • Não sei como debugar nesse caso, esse método Install.. Também não sei que parâmetro é esse...

    Como posso fazer ?

    quarta-feira, 30 de novembro de 2011 15:28
  • Testei assim tb, seguindo o que está no link: http://sandblogaspnet.blogspot.com/2009/06/reading-from-configuration-file-in-net.html , mas tb ta dando o erro...

    
    namespace App1.WindowsService
    {
        [RunInstaller(true)]
        public partial class ProjectInstaller : System.Configuration.Install.Installer
        {
            public ProjectInstaller()
            {
                InitializeComponent();
            }
    
            public override void Install(System.Collections.IDictionary stateSaver)
            {
                base.Install(stateSaver);
    
                string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, “Bin”);
                /*If checking to check whether the bin folder exists. As this is a console application the exe can be copied to any place and can be executed. If that is the case there will be no bin folder. */
                if (!Directory.Exists(filePath))
                {
                    filePath = AppDomain.CurrentDomain.BaseDirectory;
                }
                /*As the request for this class can come from both exe and website we need to combine the paths. We are first retrieving the path using the AppDomain' BaseDirectory propety and then retrieving the exe name alone. Finally passing the combined file path to ConfigurationManager class. */
                filePath = Path.Combine(filePath, Path.GetFileName(System.Reflection.Assembly.
                GetExecutingAssembly().Location));
                System.Configuration.Configuration theConfig = ConfigurationManager.
                OpenExeConfiguration(filePath); 
                
                //string targetDirectory = Context.Parameters["targetdir"];
    
                string param1 = Context.Parameters["Param1"];
    
                string param2 = Context.Parameters["Param2"];
    
                //string exePath = string.Format("{0}Service.exe", targetDirectory);
                
                Configuration config = ConfigurationManager.OpenExeConfiguration(filePath);
    
                config.AppSettings.Settings["CaminhoArquivosExcel"].Value = param1;
    
                config.AppSettings.Settings["CaminhoArquivosExcelProcessados"].Value = param2;
    
                config.Save();
            }
        }
    }
    
    


    quarta-feira, 30 de novembro de 2011 15:42
  • Qual o conteúdo da string targetDirectory?
    quarta-feira, 30 de novembro de 2011 16:32
  • Então deixei assim, como está abaixo.. Não sei como posso verificar o conteúdo da string como tinha solicitado.. VocÊ sabe ?

     

     public override void Install(System.Collections.IDictionary stateSaver)
            {
                base.Install(stateSaver);
    
                string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Bin");
                /*If checking to check whether the bin folder exists. As this is a console application the exe can be copied to any place and can be executed. If that is the case there will be no bin folder. */
                if (!Directory.Exists(filePath))
                {
                    filePath = AppDomain.CurrentDomain.BaseDirectory;
                }
                /*As the request for this class can come from both exe and website we need to combine the paths. We are first retrieving the path using the AppDomain' BaseDirectory propety and then retrieving the exe name alone. Finally passing the combined file path to ConfigurationManager class. */
                filePath = Path.Combine(filePath, Path.GetFileName(System.Reflection.Assembly.
                GetExecutingAssembly().Location));
                //System.Configuration.Configuration theConfig = ConfigurationManager.
                //OpenExeConfiguration(filePath); 
    
                //string targetDirectory = Context.Parameters["targetdir"];
    
                string param1 = Context.Parameters["Param1"];
    
                string param2 = Context.Parameters["Param2"];
    
                //string exePath = string.Format("{0}Proex.WindowsService.exe", targetDirectory);
    
                Configuration config = ConfigurationManager.OpenExeConfiguration(filePath);
    
                config.AppSettings.Settings["CaminhoArquivosExcel"].Value = param1;
    
                config.AppSettings.Settings["CaminhoArquivosExcelProcessados"].Value = param2;
    
                config.Save();
            }
    


    Na propriedade CustomActionData , deixei /Param1 ="[EDITA1]" /Param2="[EDITA2]"   .. tirei targetDirectory

    Nos texts aonde os parâmetros são solicitados, informei diretório existente aqui, mas exibiu as seguintes msg:

     

     

    quarta-feira, 30 de novembro de 2011 17:04
  • E antes de vc tirar o targetDirectory, você sabe que valor estava targetdir no CustomActionData?
    • Editado Vinicius TR quarta-feira, 30 de novembro de 2011 17:10
    quarta-feira, 30 de novembro de 2011 17:10
  • eu não sei pq não sei se dá pra debugar o método Install.. dá pra fazer? como seria?

     

    quarta-feira, 30 de novembro de 2011 17:13
  • Então, vc disse que colocou na propriedade CustomActionData do seu projeto de Setup as seguintes propriedades:

     

    /Param1 ="[EDITA1]" /Param2="[EDITA2]"

     

    No entanto, seu código também uma uma propriedade chamada targetdir (Context.Parameters["targetdir"];). Para isso, sua CustomActionData precisa conter

    /Param1 ="[EDITA1]" /Param2="[EDITA2]" /targetdir="alguma coisa"

    Vc tem isso no seu projeto?

     

    O que eu suspeito que esteja acontecendo no seu caso é que talvez esteja faltando uma barra invertida ( \ ) no final do caminho do diretório que vc está usando para obter o arquivo de configuração.

     

    Referência sobre o CustomActionData:

    http://msdn.microsoft.com/en-us/library/2w2fhwzz%28v=VS.100%29.aspx

    quarta-feira, 30 de novembro de 2011 17:53
  • Então deixei assim:

    CustomActionData: /targetdir="[TARGETDIR]" /Param1="[EDITA1]" /Param2="[EDITA2]"

    Ao rodar da o erro:

    quarta-feira, 30 de novembro de 2011 19:01
  • Troque /targetdir="[TARGETDIR]" por /targetdir="[TARGETDIR]\" (note a barra invertida no final) e nos reporte o que acontece.
    • Marcado como Resposta .NET Dev quinta-feira, 1 de dezembro de 2011 13:20
    quarta-feira, 30 de novembro de 2011 19:31
  • Pessoal, parece q deu certo de pegar o diretorio correto do exe , fazendo assim:

    string assemblypath = Context.Parameters["assemblypath"];

    Porém preciso então pegar do app.config, pra isso :

    string appConfigPath = assemblypath + ".config";
    


    Só que não pega corretamente, ele fica como assim -> ...\WindowsService.exe.config   (Errado)

    Como faço para pegar corretamente o appconfig?

    quarta-feira, 30 de novembro de 2011 19:34