Подтвердить что ты не робот

Пользовательское действие - Ошибка 1001: Не удалось найти файл myApp.InstallState

Я попытался создать настраиваемое действие для проекта установщика Visual Studio, чтобы изменить разрешения для файла конфигурации.

Installer.cs выглядит следующим образом:

public override void Commit(IDictionary savedState)
{
    base.Commit(savedState);

    // Get path of our installation (e.g. TARGETDIR)
    //string configPath = System.IO.Path.GetDirectoryName(Context.Parameters["AssemblyPath"]) + @"\config.xml";
    string configPath = @"C:\Program Files\Blueberry\Serial Number Reservation\config.xml";

    // Get a FileSecurity object that represents the current security settings.
    FileSecurity fSecurity = File.GetAccessControl(configPath);

    //Get SID for 'Everyone' - WellKnownSidType works in non-english systems
    SecurityIdentifier everyone = new SecurityIdentifier(WellKnownSidType.WorldSid, null);

    // Add the FileSystemAccessRule to the security settings.
    fSecurity.AddAccessRule(new FileSystemAccessRule(everyone, FileSystemRights.Modify | FileSystemRights.Synchronize, InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow));

    // Set the new access settings.
    File.SetAccessControl(configPath, fSecurity);

}

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

public override void Rollback(IDictionary savedState)
{
    base.Rollback(savedState);
}

public override void Uninstall(IDictionary savedState)
{
    base.Uninstall(savedState);
}

Затем я добавляю первичный вывод (Installer class= true) в раздел Commit пользовательских действий проекта установки.

Когда я запускаю установщик, я получаю следующую ошибку:

Error 1001: Could not find file 'c:\mypath\myapp.InstallState'

Очистка веб-страниц Я нашел несколько примеров подобных опытов, но ни одно из предлагаемых решений не сработало для меня.

Любые идеи?

4b9b3361

Ответ 1

Вы можете найти решение здесь

Цитата:

Проблема заключается в том, что инфраструктура MSI ищет файл состояния установки, который обычно создается во время установки фаза. Если пользовательские действия не участвуют в фазе установки, файл не создается.

Решение состоит в том, чтобы добавить настраиваемое действие как к установке, так и к Зафиксируйте фазы, хотя на этапе установки ничего не происходит.

Ответ 2

У меня была эта проблема, когда я не указывал настраиваемое действие в моем проекте установщика для всех четырех переопределений (установка, удаление, фиксация и откат). Как только я определил свой проект как пользовательское действие для всех четырех, проблема исчезла.

Единственными переопределениями в моем классе установщика, которые сделали что-то, были Commit и Uninstall; Я думаю, что Install был ответственным за создание файла InstallState в первую очередь, и поскольку он никогда не назывался, файл InstallState так и не был создан.

Ответ 3

Иногда "Debugger.Launch();" помещается в эти перезаписанные функции для отладки. Если вы создадите установщик с инструкцией там и во время установки, появится диалоговое окно, в котором вы спросите, требуется ли отладка, если вы нажмете "отменить отладку", вы получите это диалоговое окно с ошибкой. Поскольку вы добавили функцию "Debugger.Launch()" в свою функцию, эта функция будет считаться "пропущенной" установщиком. Поэтому не забудьте удалить его.

Ответ 4

Иногда это происходит, когда класс установщика создается неправильно. Вот учебник, который может вам помочь: http://devcity.net/Articles/339/1/article.aspx

Убедитесь, что ваше пользовательское действие соответствует рекомендациям руководства.

Ответ 5

Попробуйте установить в качестве свойств для вашего пользовательского действия параметр Installer class= false вместо true. Это исправило эту проблему для меня.

Ответ 6

Для меня проблема была такой же простой, как просто добавление закрывающей цитаты вокруг одного из имен текстовых полей в моей строке CustomActionData.

Я использовал окна "Текстовые поля (A)" и "Текстовые поля (B)" в разделе "Пользовательский интерфейс". A имеет 1 поле, EDITA1, где я получаю путь к файлу, а B имеет 2 поля, EDITB1 и EDITB2, для некоторых параметров базы данных. Строка CustomActionData выглядит так:

/filepath="[EDITA1]" /host="[EDITB1] /port="[EDITB2]" 

Должно быть:

/filepath="[EDITA1]" /host="[EDITB1]" /port="[EDITB2]" 

(закрывающая цитата на [EDITB1])

Я использовал переопределение установки в своем классе Installer для получения значений (т.е. string filepath = Context.Parameters["filepath"];) и использовал его для записи их в файл INI для моего приложения, которое будет использоваться после его установки. Я поместил "Первичный вывод" на всех этапах графического интерфейса пользовательских действий, но ничего не сделал с свойством InstallerClass (по умолчанию: True) и только установил строку CustomActionData на Install One. Я даже не включил функции переопределения в моем классе Installer, так как я не делал ничего, что было обычным в других фазах.

Ответ 7

Попробуйте установить это как в командной строке администратора. Это сработало для меня.