【问题标题】:Run script during/after VSIX install?在 VSIX 安装期间/之后运行脚本?
【发布时间】:2013-09-06 00:07:21
【问题描述】:

是否可以在 VSIX 安装期间或之后自动运行脚本(批处理文件、powershell 等)?我正在尝试解决this problem,这需要将值写入$RootKey$ 之外的注册表。我希望我可以简单地调用批处理或 PowerShell 脚本来为我执行所需的注册表写入。我已经编写好了脚本,只是不确定如何或是否可以在 VSIX 安装期间调用它们。

我的 VSIX 中已经有一个 .pkgdef 文件,所以我希望我可以在该文件的底部执行类似“Start [PathToBatchScript]”之类的操作来运行我的批处理脚本,但它似乎没有工作。

我在一些地方读到,旧的 2010 VSIX 模型无法做到这一点,但我希望它会随着新的 2012 模型而改变。

我们正在使用 Visual Studio 2012。我们非常感谢任何建议。谢谢。

【问题讨论】:

    标签: registry installation vsix


    【解决方案1】:

    很遗憾,在安装/卸载 VSIX 后无法运行脚本:

    看看这个MSDN,如果你搜索“安装期间的配置”,你会读到它不受 VSIX 支持,只有 MSI 支持。我认为在 Vs2012 中这没有改变。但是我遇到了同样的问题,我选择了这个解决方案:

    public sealed class YourPackage : Package
    {
        protected override void Initialize()
        {
            base.Initialize();
    
            var dte = (DTE2)GetService(typeof(SDTE));
            _dteEvents = dte.Events.DTEEvents;
            _dteEvents.OnStartupComplete += OnStartupComplete;
            _dteEvents.OnBeginShutdown += OnBeginShutdown;
        }
    
        private void OnBeginShutdown()
        {
            _dteEvents.OnBeginShutdown -= OnBeginShutdown;
            _dteEvents = null;
            //Run your script
        }
    
        private void OnStartupComplete()
        {
            _dteEvents.OnStartupComplete -= OnStartupComplete;
            _dteEvents = null;
            //Run your script
        }
    
    }
    

    它不会像只运行一次的 powershell 脚本那样简洁,但它是一个解决方案。

    希望对您有所帮助。

    【讨论】:

    • 感谢@JohnField,这对我有用,只需稍加调整。我必须在类中添加以下属性,以便在加载 VS 时加载它,否则永远不会运行此代码:[ProvideAutoLoad("ADFC4E64-0397-11D1-9F4E-00A0C911004F")]。由于每次使用此解决方案打开或关闭 VS 时我的代码都会运行,因此我只是做了一个简单的检查,仅在尚未应用脚本的情况下运行我的脚本。谢谢!
    • 我还需要在类上插入 ProvideAutoLoadAttribute。
    【解决方案2】:

    我可能会迟到,但你可能想看看这个。 https://github.com/madskristensen/ProtocolHandlerSample

    在此示例中,他们将协议处理程序添加到其扩展中,该处理程序将位于 Windows 注册表中。我认为除了添加协议处理程序之外,您还可以使用它。

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-06
      • 1970-01-01
      • 1970-01-01
      • 2015-05-06
      相关资源
      最近更新 更多