Makinde A. Ответов: 1

Каталоги не создаются во время установки пользовательских действий, установки vs2010


Добрый день, господа / мамы

Пожалуйста, я пытаюсь написать пользовательскую библиотеку действий для установщика vs 2010. В событии установки пользовательского действия я пытаюсь скопировать некоторые файлы (среди которых есть база данных sqlite) в такие места, как "AppData\Local\MySoftware", а некоторые-в папку "Мой документ". Я знаю, что мне следовало бы использовать свойство "файловая система на целевой машине" установочного пакета VS2010 и добавить эти папки, но мне нужно перебрать некоторый список файлов и добавить их в папку "Мой документ" и папку "MySoftware", а также сохранить каталог каждого файла в реестре.

Я создал новый класс, который унаследовал от класса Installer и переопределил событие Install, затем поместил нижеприведенные коды, но ни одна из папок не была создана, ни одно значение не было записано в реестр, и ни одна ошибка не была выброшена, пакет был успешно установлен, но эти каталоги, папки и путь к реестру не были созданы.

Я попытался вызвать библиотеку установки (пользовательскую библиотеку действий, которую я написал) Из события загрузки основной формы, она сработала, и все реестры и папки были созданы, предполагая, что с моими кодами все в порядке.

пожалуйста, помогите мне.

Что я уже пробовал:

public override void Install(System.Collections.IDictionary stateSaver)
        {
            base.Install(stateSaver);

            try
            {
                string workingdir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), Application.CompanyName, Application.ProductName);

                string datapath = Path.Combine(workingdir, "Data");
                string logopath = Path.Combine(datapath, "logo01.png");
                string bannerpath = Path.Combine(datapath, "banner01.jpg");
                string bgpath = Path.Combine(datapath, "defualt1.jpg");

                string backupdir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), Application.CompanyName, Application.ProductName);

                string dbpath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), Application.CompanyName, Application.ProductName);

                string dbdir = Path.Combine(dbpath, "ItemBank.db");

                string userpath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), Application.CompanyName, Application.ProductName, "userdata");

                string exampath = Path.Combine(datapath, "Exams");

                string configpath = Path.Combine(datapath, "config.gzsettings");

                if (!Directory.Exists(exampath))
                    Directory.CreateDirectory(exampath);

                if (!Directory.Exists(userpath))
                    Directory.CreateDirectory(userpath);

                if (!Directory.Exists(dbpath))
                    Directory.CreateDirectory(dbpath);

                if (!Directory.Exists(backupdir))
                    Directory.CreateDirectory(backupdir);

                Logger loger = new Logger(workingdir);

                if (File.Exists(@"Data\ItemBank.db"))
                {
                    if (File.Exists(dbdir))
                    {
                        string file = Path.Combine(dbpath, "ItemBank_old.db");

                        if (File.Exists(file))
                        {
                            int i = 1;

                            do
                            {
                                file = string.Format("{0}\\ItemBank_old {1}.db", dbpath, i);

                                i++;

                            }

                            while (File.Exists(file));

                        }


                        File.Copy(dbdir, file);

                    }


                    File.Copy(@"Data\ItemBank.db", dbdir, true);

                    File.Copy(@"Data\ItemBank.db", backupdir + @"\ItemBank.db", true);

                }


                if (File.Exists(@"config.gzsettings"))

                {

                    if (File.Exists(configpath))

                    {

                        string file = Path.Combine(datapath, "config_old.gzsettings");

                        if (File.Exists(file))

                        {

                            int i = 1;

                            do

                            {

                                file = string.Format("{0}\\config_old {1}.gzsettings", datapath, i);

                                i++;

                            }

                            while (File.Exists(file));

                        }


                        File.Copy(configpath, file);

                    }

                    File.Copy(@"config.gzsettings", configpath, true);

                    File.Copy(@"config.gzsettings", backupdir + @"\config.gzsettings", true);

                }


                if (Directory.Exists(@"Data\Exams"))

                {

                    foreach (string file in Directory.GetFiles(@"Data\Exams"))

                    {

                        int s = file.LastIndexOf("\\");

                        string pat = Path.Combine(exampath, file.Substring(s));

                        File.Copy(file, Path.Combine(backupdir, file.Substring(s)), true);

                    }

                }


                if (File.Exists(@"Data\default1.jpg"))

                {

                    File.Copy(@"Data\default1.jpg", bgpath, true);

                    File.Copy(@"Data\default1.jpg", backupdir + @"\default1.jpg", true);

                }


                if (File.Exists(@"Data\logo01.jpg"))

                {

                    File.Copy(@"Data\logo01.jpg", logopath, true);

                    File.Copy(@"Data\logo01.jpg", backupdir + @"\logo01.jpg", true);

                }


                RegistryKey rgk_paths = Application.UserAppDataRegistry.CreateSubKey("UsefulPaths");

                rgk_paths.SetValue("usersettingspath", configpath);

                rgk_paths.SetValue("itembankpath", dbdir);

                rgk_paths.SetValue("appdatapath", datapath);

                rgk_paths.SetValue("userdatapath", userpath);

                rgk_paths.SetValue("backuppath", backupdir);


                if (File.Exists(@"config.gzsettings"))

                {

                    Settings settings = new Settings();

                    settings.Load(@"config.gzsettings");

                    settings["userinfofolderpath"] = userpath;

                    settings["appdatapath"] = datapath;

                    settings["ItemBankPath"] = dbdir;

                    settings["examfolderpath"] = exampath;

                    settings["LogoPath"] = logopath;

                    settings["BackgroundImagePath"] = bgpath;

                    settings["BarnerPath"] = bannerpath;


                    using (RegistryKey rgk_settings = Application.UserAppDataRegistry.CreateSubKey("defaultsettings"))

                    {

                        foreach (var key in settings.GetData().Keys)

                        {

                            rgk_settings.SetValue(key, settings[key]);

                        }

                        rgk_settings.Close();

                    }


                    settings.Save(backupdir + @"\config.gzsettings");

                    settings.Save(configpath);

                }

            }

            catch (Exception e)

            {

                throw new ApplicationException("Database creation fault: \n" + e.Message);

            }

        }</code>

1 Ответов

Рейтинг:
2

Graeme_Grant

Есть ли причина, по которой вы не создаете папки при запуске приложения? Я предпочитаю, чтобы приложение "автоматически восстанавливало" папки и файлы, поскольку вы не знаете, что будет делать пользователь после запуска приложения и когда оно неактивно.


Makinde A.

Спасибо, Грэм.

Если я хочу сделать то, что вы сказали, как я буду делать?
Я имею в виду, что сначала я должен хранить эти файлы где-то в системе пользователя, прежде чем смогу автоматически восстанавливать их каждый раз, когда приложение запускается. Не так ли?