通过解码“* .itemdata-ms”二进制数据文件(Windows 8.1,StartScreen,C#),定制Windows 8.1 StartScreen

7
我将尝试以更加舒适和不依赖用户的方式编辑Windows 8.1的开始屏幕。我知道这并不是微软使用其操作系统的方式,但在企业环境中必须有一种自定义开始屏幕的方法。例如,如果我部署了一个新的软件包,应该在开始屏幕上有该图标(在右侧组中,处于预定义的位置)。
因此,我找到了文件appsFolder.itemdata-msappsFolder.itemdata-ms.bak,它们都是二进制编码的。如果我在十六进制编辑器中打开它们,可以看到几个组名称和链接,但没有转储格式。也没有办法以所需的方式在十六进制编辑器中编辑这些磁贴。 appsFolder.itemdata-ms的一部分。
?%?????☺↔         ▼   ♠   S t o r e           Y+↨♣♦?BGJ   F   1SPS?w?

我曾尝试用C#编写解码器,但没有成功,虽然可以查看所有内容,但只能像在十六进制编辑器中一样。

尝试使用PowerShell命令Export-StartLayout -as xml,一切都以正确的方式导出,包括组、磁贴和位置:

export.xml

<launcher version="2">
   <view name="Start">
     <group name="Desktop">
       <tile FencePost="0" size="wide310x150" AppID="Microsoft.Windows.Desktop"/>
       <tile FencePost="0" size="square150x150" AppID="Microsoft.InternetExplorer.Default"/>
       <tile FencePost="0" size="square150x150" AppID="Chrome"/>
     </group>
     <group name="Entwicklung">
       <tile FencePost="0" size="square150x150" AppID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Fiddler2\Fiddler.exe"/>
       <tile FencePost="0" size="square150x150" AppID="{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}\Notepad++\notepad++.exe"/>
      </group>
    </view>
</launcher>

但是,Import-StartLayout 命令并没有按预期工作,使用此命令无法将先前导出的布局应用于当前用户(只能通过使用 gpo,但这样会锁定开始屏幕)。

我还使用 ILSpy 检查了 PowerShell Cmt-Lets,但这导致了非托管代码部分。

长话短说,是否有一种方法可以解码二进制文件以编辑它们(可能是第三方工具?)并将其写回以应用更改到当前用户?


2
在Windows 8.1中,作为操作系统部署的一部分,可以自定义开始屏幕。我相信某些有进取心的第三方已经想出了更细粒度的解决方案。 - Luke
@Luke - 我知道部署的方法。但是如果用户获得了一个新的软件包,我该如何将此磁贴添加到他的开始屏幕上的预定义位置?但出于我的自身知识,我希望有人能够帮助我更详细地了解微软处理开始屏幕的方式。 - Martin
似乎也可以通过组策略来实现这一点。 - Luke
通过这种方式,用户无法编辑磁贴。就像我所说的那样,对我来说,最适合的是用户有一个固定的组和其他可自定义的组合。最后一个不可能的事情是:如果用户获得一个新的软件包,如何将此磁贴添加到他的起始屏幕?(在正确的位置) - Martin
有没有关于“新”的Windows 8.1 Update 1的新研究或结果?我发现这个更新对应用程序进行了一些重大更改和非常好的改进,但是在开始屏幕定制方面并没有什么突破。 - Martin
3个回答

4
不,不可能,这是有意为之的设计(虽然我不同意这种设计选择)。我曾经和Windows产品组就此进行过多次争论。
这与微软锁定任务栏的方式类似。请参见此处:这里
“注意:应用程序无法通过编程将自己固定到任务栏上。该功能严格保留给用户使用。”
要么:
1. 通过组策略或镜像设置所有用户的开始屏幕磁贴。(受限环境)
2. 允许用户按照自己的意愿自定义他们的桌面。(用户定义环境)

2
+1,不幸的是,这对于Windows 8来说是准确的。作为管理员,能够为我的组织提供合理的默认值,但仍然让用户超越自己的喜好进行自定义,这将是很好的。我听说这将在8.1中推出。 - Joel Coehoorn
+1 但不是我想要看到的答案。希望这在Windows 8.2或者9中会有所改变 ;) - Martin
+1,我有一种感觉,Windows 10 的风险可能会更大。大公司的软件似乎经常会发生这样的变化。在 Windows 中将快速启动从默认设置中删除就是另一个例子,这可以通过任务栏作为替代品来解释(http://windows.microsoft.com/en-GB/windows7/desktop)。如果您想要很多快捷方式,那么很快就会填满任务栏的宽度。如果他们能够提供更多选项,即使这些选项默认情况下被隐藏,也可以让初学者更容易使用。 - Kioshiki

2
我也在寻找编辑开始屏幕数据文件的方法。我已经通过GPO使其工作,并使用.Net Reflector分析了Export-StartLayout cmdlet。它通过调用windows\system32\twinapi.dll中定义的COM接口的方法来工作,因此很难解码数据文件格式。
XML文件包含在注册表中定义的APP ID,并且可以通过PS get-startapps cmdlet列出,因此可以为此创建编辑器。
我与学校和大学合作,因此需要严格控制桌面。目前,我处理的大多数学校都避开Windows 8,因为存在这些问题。似乎微软不会真正倾听人们的需求!

+1 ;) ... 我也成功地编辑了 XML 文件并通过 GPO 进行了部署。但在我们的环境中,如果我们的软件打包程序在客户端上安装了软件,则需要添加磁贴。此外,应该有可能强制固定第一个磁贴组,而其他用户则可以自己处理。但是我发现,越来越多的问题需要解决,我必须告诉他们放弃这个想法。 - Martin

1

请确保以二进制格式导出配置文件,因为Import-StartLayout不支持导入XML文件。以下是导出命令:

Export-StartLayout -As BIN -Path CustomStartScreenLayout.bin -Verbose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接