wixtoolset / issues

WiX Toolset Issues Tracker
http://wixtoolset.org/
129 stars 36 forks source link

Failed to repair installer in case of usage VsixPackage. #4178

Open wixbot opened 10 years ago

wixbot commented 10 years ago

Failed to repair installer in case of usage VsixPackage.

WIX versions: 3.7 and v4.0.1015.0

I'm using component which use VsixPackage:

<Component Id="xxx Guid="xxx"> <VSExtension:VsixPackage File="xxx" PackageId="xxx" Vital="yes" Permanent="no"/> <File Id="xxx" Name="xxx.vsix" DiskId="1" Source="xxx.vsix"/>

</Component>

And it successfully installed and uninstall during installer installation and removal. But if try to repair installer i'm getting error message and installer failed to repair. If look into the log file there can be seen:

MSI (s) (D8:3C) [16:11:48:273]: Executing op: CustomActionSchedule(Action=vim2E29D82EAE4B798043AB494DFE4D5841,ActionType=3122,Source=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\VSIXInstaller.exe,Target=/q "xxx.vsix" /admin,) CustomAction vim2E29D82EAE4B798043AB494DFE4D5841 returned actual error code 1001 (note this may not be 100% accurate if translation happened inside sandbox) MSI (s) (D8:3C) [16:12:01:811]: Note: 1: 1722 2: vim2E29D82EAE4B798043AB494DFE4D5841 3: C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\VSIXInstaller.exe 4: /q "xxx.vsix" /admin MSI (s) (D8:3C) [16:12:01:811]: Note: 1: 2205 2: 3: Error

Originally opened by simeon

wixbot commented 10 years ago

Determine what 1001 means.

Originally posted by barnson AssignedTo set to bobarnson Release changed from v3.x to v3.8

wixbot commented 10 years ago

@Simeon, could you post a full verbose log to a file-sharing site (e.g., Google Drive, SkyDrive, DropBox) and put the URL here?

1001 is what's returned when the VSIX is already installed. It should have removed and reinstalled it.

Originally posted by barnson Status changed from Open to Untriaged

wixbot commented 10 years ago

I can't attach full log due to that it is related to not yet released official product. Problem happen due to during repair installer try to install VSIX package again (without its previous removal). But VSIXInstaller.exe doesn't support repair and it detects that this VSIX package already installed and rise an exception.

Originally posted by simeon

wixbot commented 10 years ago

by log: MSI (s) (D8:3C) [16:11:17:887]: Feature: RELATED_FEATURE_NAME; Installed: Local; Request: Reinstall; Action: Reinstall ... MSI (s) (D8:3C) [16:11:17:887]: Component: RELATED_COMPONENT_NAME; Installed: Local; Request: Local; Action: Local; Client State: Local ...

But installer only perform action on installation VSIX package and doesn't do its removal.

Originally posted by simeon

wixbot commented 10 years ago

Originally changed by barnson Release changed from v3.8 to v3.x

wixbot commented 10 years ago

hello

as an alternative

add to VSCompile.cs in method ParseVsixPackageElement(XmlNode node, string componentId, string fileId) . This action unistall VSIX-package, then install VSIX-package. continue running ignore All error.

//Start 
string reinstallNamePerUser = this.Core.GenerateIdentifier("riu", componentId, fileId, "per-user", target ?? String.Empty, targetVersion ?? String.Empty);
string reinstallNamePerMachine = this.Core.GenerateIdentifier("rim", componentId, fileId, "per-machine", target ?? String.Empty, targetVersion ?? String.Empty);
string reinstallCmdLinePerUser = String.Concat(cmdlinePrefix, " /u:", packageId);
string reinstallCmdLinePerMachine = String.Concat(reinstallCmdLinePerUser, " /admin");
int reinstallExtraBitsPerUser = VSCompiler.MsidbCustomActionTypeContinue | VSCompiler.MsidbCustomActionTypeInScript;
int reinstallExtraBitsPerMachine = reinstallExtraBitsPerUser | VSCompiler.MsidbCustomActionTypeNoImpersonate;
string reinstallConditionPerUser = String.Format("NOT ALLUSERS AND Installed AND ${0}=3", componentId);
string reinstallConditionPerMachine = String.Format("ALLUSERS AND Installed AND ${0}=3", componentId);

this.SchedulePropertyExeAction(sourceLineNumbers, reinstallNamePerUser, propertyId, reinstallCmdLinePerUser, reinstallExtraBitsPerUser, reinstallConditionPerUser, null, installAfter);
this.SchedulePropertyExeAction(sourceLineNumbers, reinstallNamePerMachine, propertyId, reinstallCmdLinePerMachine, reinstallExtraBitsPerMachine, reinstallConditionPerMachine, null, reinstallNamePerUser);
 //End

Originally posted by form2t

syrcx commented 7 years ago

Any update of this bug? I met a very similar issue. Here is the code I used to install the VSIX extension and another serivce.

<Feature Id="Feature_XXVSI" Level="1" Title="XX VS 2015 Integrations" Description="XXXX">
  <Component Id="ComponentXXVSIX" Guid="81DE3E7E-855C-4E82-9BA6-E6A594A60E91" Directory="Directory_XXTemp">
    <VSExtension:VsixPackage File="FileXXVSI.VSIX" PackageId="50d6ef6d-9edd-48e8-b938-b448b15771ae" />
    <File Id="FileXXVSI.VSIX" Source="$(var.XXVSI.TargetDir)XXVSI.vsix" />
  </Component>
</Feature>

<Feature Id="Feature_XXService" Level="1" ConfigurableDirectory="XXDIRECTORY" Title ="XX Service" Description="XXXX">
  <Component Id="ComponentXXService" Guid="4C0CBD5F-AFF2-44FC-8050-12D84AF8AAB4" Directory="XXDIRECTORY" Win64="yes">
    <File Id="File_XXService" Source="$(var.XXVSI.TargetDir)WiX\asset_service.exe"/>
    <ServiceInstall Id="ServiceInstall_XXService" ....../>
    <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="XX Service" Wait="yes" />
  </Component>
</Feature>

If installation failed due to the service feature Feature_XXService, everything should be rolled back. However the VSIX is installed without being uninstalled later (by reading the verbose log, I observed nothing related to the VSIX uninstallation). How should this be fixed? Thanks!!!

barnson commented 7 years ago

The bug's open for someone to fix in WiX v4.

syrcx commented 7 years ago

Could you provide the link to the new bug.

And in the meantime, what are the suggested workaround? Thanks!

barnson commented 7 years ago

This is the bug. I'm not aware of a workaround; the issue needs someone to investigate a proper fix. If you'd care to contribute, the WiX web site has the details.