Docker for Windows - 使用sn.exe / Strong Name实用程序安装证书

时间:2018-01-02 13:55:27

标签: windows powershell docker docker-windows

我们有一个Docker镜像,用于构建我们的Visual Studio解决方案。这非常有效。现在我们有一些需要密钥的解决方案。要安装密钥,请使用sn.exe,但Microsoft已经花了很大力气确保需要人工输入,即密码..

图片基于FROM microsoft/dotnet-framework:3.5

我尝试了几个技巧,特别是来自这个Stack Overflow线程:Auto-entering Password In Sn.exe

最后一个答案是我的(Thomas Rijsewijk)。至少我有一种自动安装密钥的工作方式,但不知何故SendWait在Docker,Docker for Windows或microsoft/dotnet-framework:3.5 docker image中都不起作用。

# ---------
# Import all certificates in C:\keys
# ---------
[void][System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")
[System.Windows.Forms.SendKeys]::SendWait("hello")

当我运行这个时,我得到了#34;访问被拒绝":

Exception calling "SendWait" with "1" argument(s): "Access is denied"
At K:\install-certificates.ps1:51 char:1
+ [System.Windows.Forms.SendKeys]::SendWait("hello")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : Win32Exception

作为替代方案,我尝试了来自WScript.Shell的SendKeys():

$wshell = New-Object -com wscript.shell;
Sleep 5;
$wshell.sendkeys("test");

同样,这在我的机器(Windows 10最新版)和最新的Windows 2016服务器上完美运行。但不是在码头图像中:没有任何反应,没有错误,但它没有进入"测试"任

很多关于自动化PowerShell的讨论,但基本上我并不关心如何在构建我的docker镜像时安装证书,我只是想安装它。我在本地安装证书

Start-Process "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\sn.exe" -ArgumentList "-i `"D:\key.pfx`" VS_KEY_XXXXXXXX" -NoNewWindow;

此时,它要求输入密码,使其无法与docker build一起使用。

我在Google上搜索了很多内容,我很惊讶地看到没有其他人尝试使用sn.exe安装密钥。

PS:是的,我知道VS_KEY_XXXXXXXX不是有效的VS_KEY。我已经有一个工作机制来提取正确的VS_KEY,但这超出了这个问题的范围。

PPS:是的,我知道我可以手动运行docker,安装证书并手动提交并推送更改。但很自然地,我希望它来自我的Dockerfile

0 个答案:

没有答案