我们有一个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