Le programme d'installation MSI ne trouve pas InstallState lors de l'utilisation d'une action personnalisée avec des paramètres

Tout d'abord, oui, je sais que la VS les Projets d'Installation sont mal. C'est ce que j'ai à travailler avec. J'ai aussi vu plusieurs questions, mais ils doivent soit rester sans réponse, ou qu'ils ne correspondent pas à ma situation assez proche pour que la réponse de travailler (ou de la harpe sur les maux de VS des Projets d'Installation et les merveilles de WiX).

J'ai installer un projet pour mon application. Il a très bien fonctionné pour copier des fichiers, mais j'avais besoin d'effectuer deux actions personnalisées après la copie des fichiers. J'ai créé une classe d'installation et de le définir comme une action personnalisée dans le projet d'installation, et le squelette (ce qui n'a pas de travail, juste montré une boîte de dialogue afin que je puisse attacher un débogueur et regardez autour de vous) a très bien fonctionné. Puis, j'ai trouvé j'avais besoin de passer des paramètres à partir de la MSI de mon action personnalisée afin que je puisse y accéder via le Contexte de la propriété de la classe du programme d'installation.

Voici le code actuel de la classe d'installation (certains noms ont été changés pour protéger les innocents). Il ne fait rien mais afficher une boîte de dialogue au bon moment (une fois les fichiers copiés, mais avant l'installation s'est engagé):

namespace MyApp.Install.CustomSetup
{
    [RunInstaller(true)]
    public partial class MyAppCustomInstallActions : System.Configuration.Install.Installer
    {
        public MyAppCustomInstallActions()
        {
            InitializeComponent();
        }

        protected override void OnAfterInstall(IDictionary savedState)
        {
            try
            {
                base.OnAfterInstall(savedState);
                if (MessageBox.Show(
                    "Custom Action OnAfterInstall successfully integrated. You can attach a debugger if desired. Do you wish to perform the custom actions?",
                    "DEBUG", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return;

                SetEditablePermissionOnFolder(savedState);
                SetApplicationSettingsFromWizard(savedState);
            }
            catch (Exception ex)
            {
                Context.LogMessage(ex.ToString());
                throw;
            }
        }

        private void SetApplicationSettingsFromWizard(IDictionary savedState)
        { 
            //TODO: Implement
        }

        private void SetEditablePermissionOnViewerFolder(IDictionary savedState)
        {
            //TODO: Implement
        }
    }
}

Le plan est d'obtenir les actions personnalisées de travail, puis prendre la boîte de dialogue et juste de le faire.

Ici est la chaîne pour CustomActionData pour l'Installation d'action de la configuration du projet personnalisé d'actions:

/phonenumber=[phonenumber] /thirdpartyinstallpath1="[thirdpartyinstallpath1]\" /thirdpartyinstallpath2="[thirdpartyinstallpath2]\" /thirdpartyinstallpath3="[thirdpartyinstallpath3]\"

Si je n'utilise pas ce paramètre de chaîne, c'est bien, mais je n'ai pas de paramètres. Si je ne spécifiez cette chaîne, le programme d'installation échoue avant ma propre boîte de dialogue s'affiche, avec deux erreurs: "Exception occurred while initializing the installation: Could not load file or assembly 'file:///C:\Windows\SysWOW64\Files' or one of its dependencies. The system cannot find the file specified"et "Error 1001. Could not find file C:\Program Files (x86)\MyCompany\MyApp\MyApp.Install.CustomSetup.InstallState".

Ce que je fais mal? Suis-je en train de faire quelque chose de mal? Est-il une solution qui ne nécessite pas de me re-créer un programme d'installation à l'aide de certains cadre différent?

EDIT: j'ai trouvé que la suppression de tout, mais le numéro de téléphone de paramètre, et de mettre au [NUMÉRO de téléphone] entre guillemets, qui permet à des paramètres passés. Cependant, je ne peux pas passer tout de les chemins de répertoire; j'ai essayé avec [DIR] exactement comment plusieurs blogs et des procédures relatives à dire de le faire, pas de dés.

source d'informationauteur KeithS