2016-05-30 15 views
-1

Wix 3.10.2を使用して製品インストーラを生成します。私はドライバをアンインストールする際に多くの問題を抱えています。私はそれらを理解することができ、私はドライバをインストールすることができます最高のネット上の例に従っている。問題は、アンインストールであり、そうではありません。 OSのバージョンに応じて、適切なドライバをインストールしドライバをアンインストールできません

<Directory Id="MYDRIVER" Name="myDriver"> 
    <!-- Windows 7 --> 
    <Component Id="myDriver_Win7" Guid="..." KeyPath="yes" SharedDllRefCount="yes" Win64="$(var.Win64)"> 
     <Condition>VersionNT = 601</Condition> 
     <File Id="myDriver.inf_win7" Name="myDriver.inf" Vital="no" DiskId="1" Source="$(var.WIN64BINARIES)\UHDDriver\Win7Release\myDriver.inf" /> 
     <File Id="myDriver.sys_win7" Name="myDriver.sys" Vital="no" DiskId="1" Source="$(var.WIN64BINARIES)\UHDDriver\Win7Release\myDriver.sys" /> 
     <File Id="myDriver_.cat_win7" Name="myDriver_.cat" Vital="no" DiskId="1" Source="$(var.WIN64BINARIES)\UHDDriver\Win7Release\myDriver_.cat" /> 
     <Driver AddRemovePrograms="no" DeleteFiles="yes" Legacy="yes" PlugAndPlayPrompt="no" Sequence="4" xmlns="http://schemas.microsoft.com/wix/DifxAppExtension" /> 
    </Component> 
    <!-- Windows 8.1, Server 2012R2 --> 
    <Component Id="myDriver_Win8.1" Guid="..." KeyPath="yes" SharedDllRefCount="yes" Win64="$(var.Win64)"> 
     <Condition>VersionNT = 603</Condition> 
     <File Id="myDriver.inf_win8.1" Name="myDriver.inf" Vital="no" DiskId="1" Source="$(var.WIN64BINARIES)\UHDDriver\Win8.1Release\myDriver.inf" /> 
     <File Id="myDriver.sys_win8.1" Name="myDriver.sys" Vital="no" DiskId="1" Source="$(var.WIN64BINARIES)\UHDDriver\Win8.1Release\myDriver.sys" /> 
     <File Id="myDriver_.cat_win8.1" Name="myDriver_.cat" Vital="no" DiskId="1" Source="$(var.WIN64BINARIES)\UHDDriver\Win8.1Release\myDriver_.cat" /> 
     <Driver AddRemovePrograms="no" DeleteFiles="yes" Legacy="yes" PlugAndPlayPrompt="no" Sequence="4" xmlns="http://schemas.microsoft.com/wix/DifxAppExtension" /> 
    </Component> 
</Directory> 

<Feature Id="extDevice" AllowAdvertise="no" ConfigurableDirectory="INSTALLDIR" Level="101" Title="External USB Device"> 
... 
<ComponentRef Id="myDriver_Win7" /> 
<ComponentRef Id="myDriver_Win8.1" /> 
... 
</Feature> 

はここproduct.wxsの関連セクションです。アンインストール、私は思っただろう、単に逆を行います。

私が読んでいるのはhttps://msdn.microsoft.com/en-us/library/windows/hardware/ff553591%28v=vs.85%29.aspxなので、DeleteFilesは何もしません(OS> win7の場合)。

旧式の時代から、古いバージョンのドライバを削除しようとしたカスタムアクション(installshieldから移植されました)もありました。

<CustomAction Id="CA_DeleteDriverSysFile" BinaryKey="CustomActions_dll" DllEntry="DeleteDriverSysFile" /> 

<InstallExecuteSequence> 
... 
<Custom Action="CA_DeleteDriverSysFile" After="RemoveFolders">(REMOVE="ALL") Or (feature selection conditions)</Custom> 
... 
</InstallExecuteSequence> 

そして、C#コード:

[CustomAction] 
public static ActionResult DeleteDriverSysFile(Session session) 
{ 
    return DoDeleteDriverSysFile(session, MYDRIVER_SYS); 
} 

static ActionResult DoDeleteDriverSysFile(Session session, string driverFilen) 
{ 
    try 
    { 
     string driverPath = Path.Combine(new string[] { Environment.SystemDirectory, "drivers", driverFilen }); 
     File.Delete(driverPath); 
     return ActionResult.Success; 
    } 
    catch (Exception e) 
    { 
     return ActionResult.Failure; 
    } 
} 

かなりシンプルですが、、ActionResult.Failureコードは常に..ファイルを削除することはできません返されるカスタムアクションを設定product.wxsからコードドライバディレクトリから、管理者としてログインしたこともあります。

私はここで間違っていますが、ドライバーが削除されるためにはどうすればよいですか?

関連 - このドライバがインストールされているアンインストールが失敗したWindowsサーバ2016ボックスを修正するにはどうすればよいですか?

+2

CustomActionをExecute = "deferred"とマークしましたか?あなたは、session.Log( "システムドライバを削除している例外:{0}"、e.Message)を使いたいかもしれません。あなたの復帰前にActionResult.Failure msiexecを/ l * vlog.txtで実行すると、msiログにいくつかの情報があるので、 –

+1

を忘れないでください。追加しようとするときにImpersonate = "no"を忘れないでくださいExecute = "deferred " –

+0

^^それらはトリックでした! – Jon

答えて

0

ブライアンとスターマンが質問に答えました。 CAは即座に実行し、ユーザーがインストールを実行するように設定しました。また、PackageタグにInstallScope="perMachine"を追加しました。

マシンを修正するために、私はデバイスマネージャーに行き、View-> Hiddenを有効にして、問題のドライバを右クリックして削除しました。次に、通常のチャネルでソフトウェアを削除します。

関連する問題