【问题标题】:Suppress MS-Office applications sending telemetry data programmatically禁止以编程方式发送遥测数据的 MS-Office 应用程序
【发布时间】:2019-12-11 03:06:27
【问题描述】:

我们在自己的应用程序中使用带有导入 ActiveX 类型库的 MS-Office 应用程序(例如,将 MS-Office 文档即时转换为 PDF)。

我们的应用程序有意等待 MS-Office 应用程序后台线程结束。
从 MS-Office 2019 版开始,我们注意到后台线程阻塞了很长时间(18-25 秒)。原因显然是 MS-Office 应用程序一关闭/退出就会发送遥测数据。
使用 ProgMon 工具进行监控证明了这一点。

我们还发现有一种解决方法,通过操作以下注册表项来禁用发送遥测数据:

Computer\HKEY_CURRENT_USER\Software\Microsoft\Office\Common\ClientTelemetry: REG_DWORD-Value (32bit): Disable Temetry: 1

如果这样做,阻塞时间将减少到 3-5 秒。

这是我们的应用程序所做的代码 sn-p(几乎是我们用来隔离和测试问题的核心功能):

procedure TForm59.ConvertEarlyBinding(const _documentFilePath : string; 
                                      bOnlyOpenClose: Boolean = False);
var
    WordApp : ActiveX.TypeLibs.Word.Application;
    WordDoc : ActiveX.TypeLibs.Word.Document;

    oleTrue : OleVariant;
    oleFalse : OleVariant;
    emptyVariant : OleVariant;
begin
    oleTrue := True;
    oleFalse := False;
    emptyVariant := EmptyParam;

    WordApp := ActiveX.TypeLibs.Word.coApplication.Create;    
    WordApp.Visible := True;

    WordDoc := WordApp.Documents.Open(_documentFilePath, EmptyParam, oleTrue, 
                                      EmptyParam, EmptyParam, EmptyParam,
                                      EmptyParam, EmptyParam, EmptyParam, 
                                      EmptyParam, EmptyParam, EmptyParam, 
                                      EmptyParam, EmptyParam, EmptyParam, 
                                      EmptyParam);

    if not bOnlyOpenClose then begin
        WordDoc.ExportAsFixedFormat(ChangeFileExt(_documentFilePath, '.pdf'), 
                                    wdExportFormatPDF, false, 
                                    wdExportOptimizeForOnScreen, wdExportAllDocument, 
                                    -1, -1, wdExportDocumentWithMarkup, 
                                    false, false,
                                    wdExportCreateWordBookmarks, false,
                                    false, false, EmptyParam);
    end;

    WordApp.ActiveDocument.Close(oleFalse, emptyVariant, emptyVariant);
    WordDoc := nil;

    WordApp.Quit(false, EmptyParam, EmptyParam);

    WordApp := nil;
end;

现在的问题是:我们可以从 MS-Office 应用程序界面使用任何属性来阻止它发送遥测数据吗?

我们很清楚,我们也可以在应用程序中以编程方式操作注册表项,但最好仅对当前启动的 MS-Office 应用程序实例禁止此操作。

【问题讨论】:

  • 有趣的问题。我对这个话题一无所知,但我会认为必须有一种方法来抑制它,因为全世界对隐私的担忧日益增加。这篇文章有没有告诉你任何你不知道的事情:;docs.microsoft.com/en-us/deployoffice/compat/…
  • @MartynA (透明度披露:我在这里从我的私人 SO 帐户回复,用于询问的帐户是在工作中创建的,只会在工作中使用。)我们当然知道遥测仪表板,但感谢您指出。事实上,由于 DSGVO 的担忧,微软似乎已经实现了该功能(我相信 Office 版本 2016)。我们还认为,在启动特定的 MS Office 应用程序实例时应该有一个禁用发送遥测数据的选项,这就是我问这个的原因。

标签: windows delphi com ms-office


【解决方案1】:

Microsoft Office 应用程序不为此提供任何属性或方法。要停止在本地计算机上收集数据,请更新注册表或设置组策略设置,如下所示。默认情况下,遥测数据收集在 Office 中处于禁用状态。请检查您的环境之前是否启用了遥测代理。检查注册表设置:

HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\OSM
HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\16.0\OSM
HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\OSM
HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\15.0\OSM

其中 15.0 代表 Office 2013

如果您之前使用的是从 Office 2013 升级的 Office 2016,请同时禁用 Office 2013 遥测代理。请检查以下文章中提到的注册表设置:

Deploy Office Telemetry Dashboard

为 Office 用户禁用所有遥测设置:

Manage the privacy of data monitored by Office Telemetry Dashboard

禁用日志记录不会删除已从计算机收集的数据。要在本地客户端计算机上删除此数据,请删除位于

下的文件 evt.tblsln.tbluser.tbl
%LocalAppData%\Microsoft\Office16.0\Telemetry\Microsoft\Office\16.0\Telemetry\.

【讨论】:

  • 好吧,谢谢你写一个答案。没有像我们已经知道的那样添加太多,但是很好。我不得不不同意的一点是,默认情况下禁用发送遥测数据。这似乎不是真的,因为我们根本不应该面对这个问题。请注意,我们有大约 17,000 个客户在野外,我们根本无法检查每个人的特定设置。
猜你喜欢
  • 2016-05-23
  • 1970-01-01
  • 2023-03-10
  • 1970-01-01
  • 2010-09-16
  • 2019-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多