2010-07-07 5 views
2

J'ai créé un fichier géré CustomAction pour copier 2 fichiers non inclus dans le fichier * .MSI du répertoire d'installation.Wix: Copie de fichiers dans une action personnalisée dans le répertoire des programmes (Windows 7)

Bien que cela fonctionne dans Windows XP, il échoue dans Windows 7. Bien que le journal indique que les fichiers sont copiés à l'emplacement souhaité, , ils sont en fait copiés à C:\Users\MyUser\AppData\Local\VirtualStore\Program Files (x86)\MyApp\. Ma conjecture est que cela a à voir avec les droits d'accès pour modifier le dossier du programme.

Voilà comment j'appelle l'action personnalisée dans WiX:

<CustomAction 
    Id='InstallSource' 
    BinaryKey='SrcInstActionDll' 
    DllEntry='InstallSourceFiles' 
    Execute='deferred' 
    Impersonate='no'/> 
<CustomAction 
    Id="InstallSource.SetProperty" 
    Return="check" 
    Property="InstallSource" 
    Value='Files=[SourceDir]$(var.SourceZipName),[SourceDir]$(var.SymbolsZipName);TargetDir=[ParentFolder]' 
    Execute='immediate'/> 

Le CustomAction s'invoque simplement File.Copy(). Les autres fichiers copiés par le programme d'installation fonctionnent parfaitement dans Windows 7. Seuls les fichiers copiés à l'aide du CustomAction présentent le problème décrit.

Répondre

2

En effet, ce comportement est dû à la redirection du système de fichiers déclenchée lorsqu'une application 32 bits (dans un environnement Windows 64 bits) fonctionnant en tant qu'utilisateur standard tente d'écrire dans un dossier privilégié.

Pour moi, il semble que votre action personnalisée ne fonctionne pas élevée. Étant donné que la définition de l'action personnalisée semble correcte, la question qui reste est l'endroit où vous exécutez cette action personnalisée.

Étant donné que vous mentionnez le journal, je suppose que vous exécutez msiexec et que vous vérifiez les journaux. Assurez-vous que votre action personnalisée court après une ligne qui ressemble à:

MSI (s) (BC:70) [13:34:10:669]: MSI_LUA: Elevation required to install product, will prompt for credentials 
MSI (s) (BC:70) [13:34:59:528]: MSI_LUA: Credential Request return = 0x0 
MSI (s) (BC:70) [13:34:59:528]: MSI_LUA: Elevated credential consent provided. Install will run elevated 

Il y a quelque temps j'ai eu un problème similaire avec des actions personnalisées et this blog post m'a aidé à comprendre comment y remédier. C'est another post que je pense peut aider

Hope this helps

0

Comme vous avez dit, je pense que votre élévation a besoin d'une action personnalisée. Puisque votre CA est un projet .Net, il est assez facile de le configurer pour supporter l'élévation.

S'il vous plaît vérifier le lien suivant, il a une bonne explication sur la façon de manipuler UAC sur un projet .Net.

enabling-your-application-for-uac-on-vista

Hope it helps.

+0

Lien est maintenant mort FYI – techvice

Questions connexes