Пример #1
0
        /// <summary>
        /// Cria uma instância de setup a partir de um executável ou pasta
        /// </summary>
        /// <param name="executableFile"></param>
        /// <param name="setupData"></param>
        /// <param name="message"></param>
        /// <param name="files"></param>
        /// <returns></returns>
        public static bool Create(string executableFile, out SetupData setupData, out string message, string[] files = null)
        {
            if (files == null)
            {
                files = DefaultExtensions;
            }

            setupData = null;
            if (Directory.Exists(executableFile))
            {
                var exes = Directory.GetFiles(executableFile, "*.exe");
                switch (exes.Length)
                {
                case 0:
                    message = "Não foram encontrados executáveis em " + executableFile;
                    return(false);

                case 1:
                    executableFile = exes[0];
                    break;

                default:
                    bool found = false;
                    foreach (var f in exes)
                    {
                        if (Path.GetFileNameWithoutExtension(f).Equals(Path.GetFileName(executableFile), StringComparison.InvariantCultureIgnoreCase))
                        {
                            executableFile = f;
                            found          = true;
                            break;
                        }
                    }
                    if (found)
                    {
                        break;
                    }
                    message = "Foram encontrados mais de um executável em " + executableFile;
                    return(false);
                }
            }
            if (!File.Exists(executableFile))
            {
                message = "Executável inexistente em " + executableFile;
                return(false);
            }
            string path = Path.GetDirectoryName(executableFile);

            setupData = new SetupData
            {
                Executable = new SetupFile(executableFile),
                SetupFile  = Path.Combine(Path.GetDirectoryName(executableFile), DefaultFileName)
            };

            foreach (var f in files)
            {
                var f0 = Directory.GetFiles(path, f, SearchOption.AllDirectories);
                foreach (var f1 in f0)
                {
                    if (!f1.Equals(executableFile, StringComparison.InvariantCultureIgnoreCase))
                    {
                        setupData.Files.Add(new SetupFile(f1, path));
                    }
                }
            }


            message = "OK";
            return(true);
        }