SQL Server Management Studio 17.9 在使用固定选项卡时崩溃

SQL Server Management Studio 17.9 crashing when using pinned tabs

由于我正在做的工作,我需要在我的笔记本电脑上安装最新的 SQL 服务器,SQL Server Management Studio 和 Visual Studio 2017 Dev(所有最新版本可作为今天在 Microsoft 网站上供下载)。

在我安装 VS 2017 之前一切正常(有很多选项 - 总安装量约为 50GB,反映了正在完成的工作)。完成后,当我在选项卡之间切换时 SSMS 崩溃。是的。我在选项卡 A 中打开查询 A,然后在选项卡 B 中打开查询 B(连接到同一服务器),当我单击刚刚加载的查询 B(双击 Windows 资源管理器并使用默认关联 .sql 文件)- boom:没有错误消息,没有警告。 SSMS 显示转轮 5 秒,然后重新启动。

显然它此时无法使用,但是在我对 Windows 进行核攻击并从头开始重新安装之前,是否有人遇到过类似的问题并找到了原因?

已经尝试过 SSMS 修复、VS 修复、SSMS 重装、VS 重装、SSMS 卸载然后重装、SQl 卸载 + SSMS unisntall + VS 卸载(有问题因为 VS 安装程序想要更新,然后无法更新卸载整个 VS,必须手动逐个应用程序),然后按照 Microsoft 建议的顺序重新安装:SQL 服务器、SSMS、VS。再次 - 工作正常,直到 VS 安装完成...

感谢任何帮助。

经过进一步调查:需要固定其中一个选项卡才能发生崩溃。但是当我固定任何标签的那一刻......一切都消失了。所以 SSMS 和 VS 之间可能没有 link,但现在复制了 3 次:打开选项卡,固定,打开另一个选项卡,点击第一个,然后返回第二个并崩溃。

经过一段时间和进一步调查(2018 年 10 月 11 日):

我又遇到了这个问题。但目前还不清楚它是 DisplayPort 还是 Displaylink 到 DP (因为我仍在使用端口复制器,利用 DisplayLink解决方案),这就是原因,因为我的笔记本电脑没有 DP 输出,只有 HDMI。我也无法在不破坏其他人的情况下在其他工作站上复制问题。

DisplayPort 的 link 仍然存在,因此切换到 HDMI 仍然是一个有效的解决方法(如我在下面的回答中所示),但问题绝对是起源于软件,与 Visual Studio 某种程度上来说。或者至少事件查看器中针对此错误显示的内容:

Application: Ssms.exe Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.ArgumentException at System.Windows.Rect.set_Height(Double) at Microsoft.VisualStudio.PlatformUI.Shell.DraggedTabInfo.NormalizeTabHeight() at Microsoft.VisualStudio.PlatformUI.Shell.DraggedTabInfo.ExpandTabStripCore() at Microsoft.VisualStudio.PlatformUI.Shell.DraggedTabInfo.MeasureTabStrip() at Microsoft.VisualStudio.PlatformUI.Shell.Controls.DockPreviewWindow.OnPanelLayoutUpdated(System.Object) at Microsoft.VisualStudio.PlatformUI.Shell.Controls.DockPreviewWindow.OnPanelLayoutUpdated(System.Object, System.Windows.RoutedEventArgs) at System.Windows.RoutedEventHandlerInfo.InvokeHandler(System.Object, System.Windows.RoutedEventArgs) at System.Windows.EventRoute.InvokeHandlersImpl(System.Object, System.Windows.RoutedEventArgs, Boolean) at System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject, System.Windows.RoutedEventArgs) at System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs)
at Microsoft.VisualStudio.PlatformUI.Shell.Controls.ReorderTabPanel.OnLayoutUpdated(System.Object, System.EventArgs) at System.Windows.ContextLayoutManager.fireLayoutUpdateEvent() at System.Windows.ContextLayoutManager.UpdateLayout() at System.Windows.ContextLayoutManager.UpdateLayoutCallback(System.Object) at System.Windows.Media.MediaContext+InvokeOnRenderCallback.DoWork()
at System.Windows.Media.MediaContext.FireInvokeOnRenderCallbacks()
at System.Windows.Media.MediaContext.RenderMessageHandlerCore(System.Object) at System.Windows.Media.MediaContext.RenderMessageHandler(System.Object) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) at System.Windows.Threading.DispatcherOperation.InvokeImpl() at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(System.Object) at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext, System.Threading.ContextCallback, System.Object) at System.Windows.Threading.DispatcherOperation.Invoke() at System.Windows.Threading.Dispatcher.ProcessQueue() at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) at MS.Win32.HwndWrapper.WndProc(IntPtr, Int32, IntPtr, IntPtr, Boolean ByRef) at MS.Win32.HwndSubclass.DispatcherCallbackOperation(System.Object) at System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate, System.Object, Int32) at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(System.Object, System.Delegate, System.Object, Int32, System.Delegate) at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority, System.TimeSpan, System.Delegate, System.Object, Int32) at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr, Int32, IntPtr, IntPtr)

相同的笔记本电脑,与以前相同的 Windows 安装,相同的 SSMS 和 VS 安装。变化:不同的扩展坞(thunderbolt 而不是 USB3.0),两个外部显示器(相同型号,但不同的标本)通过 DP 菊花链连接,连接到扩展坞中的单个 miniDisplayport 输出。

直到我颠倒了菊花链的工作顺序(所以之前显示编号 2 现在显示编号 3,笔记本电脑本机保留主显示器和编号 1)一切都很好。

交换后问题又来了。由于监视器被识别为新设备,因此将它们设置为 1920x1080 分辨率,从其原始的 1920x1200 和复制而不是扩展。当把它全部设置回我想要的时候,错误又开始了。

经过更多调查:发现此线程:

https://feedback.azure.com/forums/908035-sql-server/suggestions/33619039-crash-when-going-to-pinned-tab

并在那里复制了技巧。在将更多测试问题缩小到 Displayport 之后 - 罪魁祸首显示器通过 USB 端口复制器连接到笔记本电脑,它可以将显示输出到三个显示器(2xHDMI 和 1xDP)。当有问题的显示器的连接从 DP 更改为 HDMI 时,问题就消失了。