无法通过批处理脚本从 visual studio post 构建目标执行 reg 查询
Cannot execute reg query from visual studio post build target via batch script
所以这很奇怪,我不确定如何解决这个问题。当我完成 Visual Studio 解决方案的构建时,我编写了一些批处理 (.bat) 例程来对程序集进行代码签名。这是 BAT 代码:
@echo off
echo.
echo Signing Dlls...
setlocal ENABLEEXTENSIONS
set DLL_PATH=%1
set PFX_PATH="C:\Users\ksobon\source\repos\HOK-Revit-Addins\_cert\archilabCertificate.pfx"
set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\HOK"
set VALUE_NAME="certificatePassword"
for /f "tokens=3" %%a in ('reg query %KEY_NAME% /V %VALUE_NAME% ^|findstr /ri "REG_SZ"') do set PFX_PASS=%%a
echo PFX File Path: %PFX_PATH%
echo PFX Password: %PFX_PASS%
echo DLL File Path: %DLL_PATH%
"C:\Program Files (x86)\Windows Kits\bin.0.15063.0\x86\signtool.exe" sign /f %PFX_PATH% /p %PFX_PASS% /t http://timestamp.comodoca.com/authenticode %DLL_PATH%
endlocal
当我像这样从 PowerShell 调用它时:
.\codeSigning.bat "C:\Users\ksobon\Desktop\Newtonsoft.Json.dll"
我得到了正确的结果并且 dll 得到了签名。那里没有问题。但是,当我像这样将它添加到我的 Visual Studio 构建目标时:
<Target Name="CopyFiles" AfterTargets="AfterBuild">
<Exec Command=""$(SolutionDir)..\_postBuild\codeSigning.bat" "$(TargetPath)""/>
</Target>
它给我带来了以下错误:
想法?
对于其他陷入困境的人。此处解释了该问题:Powershell script from Visual Studio Post-build-event failing
基本上,它与以下事实有关:Visual Studio 调用的 PowerShell 版本 (x64) 与我刚从“开始”菜单 (x86) 启动它时获得的版本不同。解决此问题的方法是指定在我的调用中直接使用哪个电源 shell,如下所示:
<Target Name="CopyFiles" AfterTargets="AfterBuild">
<Exec Command=""%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe" "$(SolutionDir)..\_postBuild\codeSigning.bat" "$(TargetPath)""/>
</Target>
所以这很奇怪,我不确定如何解决这个问题。当我完成 Visual Studio 解决方案的构建时,我编写了一些批处理 (.bat) 例程来对程序集进行代码签名。这是 BAT 代码:
@echo off
echo.
echo Signing Dlls...
setlocal ENABLEEXTENSIONS
set DLL_PATH=%1
set PFX_PATH="C:\Users\ksobon\source\repos\HOK-Revit-Addins\_cert\archilabCertificate.pfx"
set KEY_NAME="HKEY_LOCAL_MACHINE\SOFTWARE\HOK"
set VALUE_NAME="certificatePassword"
for /f "tokens=3" %%a in ('reg query %KEY_NAME% /V %VALUE_NAME% ^|findstr /ri "REG_SZ"') do set PFX_PASS=%%a
echo PFX File Path: %PFX_PATH%
echo PFX Password: %PFX_PASS%
echo DLL File Path: %DLL_PATH%
"C:\Program Files (x86)\Windows Kits\bin.0.15063.0\x86\signtool.exe" sign /f %PFX_PATH% /p %PFX_PASS% /t http://timestamp.comodoca.com/authenticode %DLL_PATH%
endlocal
当我像这样从 PowerShell 调用它时:
.\codeSigning.bat "C:\Users\ksobon\Desktop\Newtonsoft.Json.dll"
我得到了正确的结果并且 dll 得到了签名。那里没有问题。但是,当我像这样将它添加到我的 Visual Studio 构建目标时:
<Target Name="CopyFiles" AfterTargets="AfterBuild">
<Exec Command=""$(SolutionDir)..\_postBuild\codeSigning.bat" "$(TargetPath)""/>
</Target>
它给我带来了以下错误:
想法?
对于其他陷入困境的人。此处解释了该问题:Powershell script from Visual Studio Post-build-event failing
基本上,它与以下事实有关:Visual Studio 调用的 PowerShell 版本 (x64) 与我刚从“开始”菜单 (x86) 启动它时获得的版本不同。解决此问题的方法是指定在我的调用中直接使用哪个电源 shell,如下所示:
<Target Name="CopyFiles" AfterTargets="AfterBuild">
<Exec Command=""%WINDIR%\SysNative\WindowsPowerShell\v1.0\powershell.exe" "$(SolutionDir)..\_postBuild\codeSigning.bat" "$(TargetPath)""/>
</Target>