2015-06-15 128 views
2

我使用inno setup来安装我的小组创建的visual studio扩展。它安装得很好,但我无法通过inno安装程序卸载它。就像现在一样,用户必须通过Visual Studios手动卸载它。这是应该安装和卸载VSIX文件中的代码:使用inno setup卸载visual studio扩展

[Files] 
Source: "MyExtension.vsix"; DestDir: "{app}"; AfterInstall:installVsix; Flags: ignoreversion recursesubdirs createallsubdirs 

[UninstallRun] 
Filename:"MyExtension.vsix"; WorkingDir: "{app}"; Parameters:"/q /a /u""{code:uninstallVsix}"; Flags: shellexec runascurrentuser 

[Code] 
procedure installVsix(); 

var 
    ErrorCode: Integer; 

begin 
    if not ShellExec('', ExpandConstant('{app}\MyExtension.vsix'), '/q /a /i', '', SW_SHOW, ewNoWait, ErrorCode) then 
    begin 
    // handle failure if necessary 
    end; 
end; 


function uninstallVsix(parameters:String): String; 

var 
    ErrorCode: Integer; 

begin 
    ShellExec('', ExpandConstant('{app}\MyExtension.vsix'), parameters, '', SW_SHOW, ewNoWait, ErrorCode) 
    Result:='' 
end; 

现在我收到以下错误,当我卸载程序: 路径VSIX文件“的path.vsix”是无效的或你不没有必要的访问权限。请检查路径是否有效,并且您有访问权限。

我知道路径在卸载前是有效的。我不确定是否问题是文件在VsixInstaller能够运行之前被卸载,如果这是问题,那么我不知道如何要解决这个问题。

我是Inno Setup的新手,我真的不知道该怎么做。

+0

我从来没有处理过这些扩展,所以我只能查看'[UninstallRun]'这样的条目。我会设置Filename:{app} \ MyExtension.vsix“',删除'WorkingDir',去掉'”{code:uninstallVsix}“'字符串(因为它写得不好,你应该从'代码]'或从[UninstallRun]',而不是两者),如果你缺少权限,我会尝试删除'runascurrentuser'标志。所以它会变成只是'文件名:“{app} \ MyExtension.vsix”;参数:“/ q/a/u”;标志:shellexec'。但是,这只是一个疯狂的猜测:-) – TLama

回答

1

.Vix是安装程序,因此您使用InnoSetup安装程序来安装安装程序,这很奇怪。 (文件夹C:\ Program Files(x86)\ Microsoft Visual Studio <版本> \ Common7 \ IDE).Vixix文件与.vsix安装工具相关联,名为VSIXInstaller.exe。安装后,扩展内部.vsix通过VS(位于文件夹C:\ Users \ <用户> \ AppData \ Local \ Microsoft \ VisualStudio \ <版本> \ Extensions)被复制到一个随机文件夹以避免与其他扩展。请注意,一旦安装了扩展程序,它的.vsix安装程序文件可能会被删除!

要卸载您使用与/ u标志VSIX安装工具基于.vsix扩展(也有其他标志安静,等等)和扩展的标识:

VSIXInstaller.exe/U :{VSIXIdentifier}