JiaHe's Blog

读万卷书,行万里路

或者将脚本保存为 disable-edge-auto-update.ps1 文件,右键点击 “使用 PowerShell 运行”

disable-edge-auto-update.ps1
if ([Environment]::Is64BitOperatingSystem -eq "True") {
#Write-Host "64-bit OS"
$PF=${env:ProgramFiles(x86)}
}
else {
#Write-Host "32-bit OS"
$PF=$env:ProgramFiles
}

if ($(Test-Path "$PF\Microsoft\Edge\Application\msedge.exe") -eq "True") {
# 结束进程
taskkill /im MicrosoftEdgeUpdate.exe /f
taskkill /im msedge.exe /f
# Microsoft Edge 更新服务 (sysin)
#这里也可以使用 sc.exe stop "service name"
Stop-Service -Name "edgeupdate"
Stop-Service -Name "edgeupdatem"
Stop-Service -Name "MicrosoftEdgeElevationService"
# Windows 10 默认 PS 版本 5.1 没有 Remove-Service 命令
# This cmdlet was added in PS v6. See https://docs.microsoft.com/en-us/powershell/scripting/whats-new/what-s-new-in-powershell-core-60?view=powershell-6#cmdlet-updates.
#Remove-Service -Name "edgeupdate"
#Remove-Service -Name "edgeupdatem"
#Remove-Service -Name "MicrosoftEdgeElevationService"
# sc 在 PowerShell 中是 Set-Content 别名,所以要使用 sc.exe 否则执行后无任何效果
sc.exe delete "edgeupdate"
sc.exe delete "edgeupdatem"
sc.exe delete "MicrosoftEdgeElevationService"
# 任务计划企业版
#schtasks.exe /Delete /TN \MicrosoftEdgeUpdateBrowserReplacementTask /F
#schtasks.exe /Delete /TN \MicrosoftEdgeUpdateTaskMachineCore /F
#schtasks.exe /Delete /TN \MicrosoftEdgeUpdateTaskMachineUA /F
Get-ScheduledTask -taskname MicrosoftEdgeUpdate* | Unregister-ScheduledTask -Confirm: $false
# 移除更新程序
Remove-Item "$PF\Microsoft\EdgeUpdate" -Recurse -Force
Write-Output "Disable Microsoft Edge Enterprise Auto Update Successful!"
}
elseif ($(Test-Path "$env:USERPROFILE\AppData\Local\Microsoft\Edge\Application\msedge.exe") -eq "True") {
# 结束进程
taskkill /im MicrosoftEdgeUpdate.exe /f
taskkill /im msedge.exe /f
# 用户版没有创建服务
# 获取SID方法
function Get-CurrentUserSID {
[CmdletBinding()]
param(
)
Add-Type -AssemblyName System.DirectoryServices.AccountManagement
return ([System.DirectoryServices.AccountManagement.UserPrincipal]::Current).SID.Value
}
# 用户版任务计划
schtasks.exe /Delete /TN \MicrosoftEdgeUpdateTaskUser$(Get-CurrentUserSID)Core /F
schtasks.exe /Delete /TN \MicrosoftEdgeUpdateTaskUser$(Get-CurrentUserSID)UA /F
#Get-ScheduledTask -taskname MicrosoftEdgeUpdate* | Unregister-ScheduledTask -Confirm: $false
# 移除更新程序
Remove-Item "$env:USERPROFILE\AppData\Local\Microsoft\EdgeUpdate" -Recurse -Force
Write-Output "Disable Microsoft Edge Users Setup Auto Update Successful!"
}
else {
Write-Output "No Microsoft Edge Installation Detected!"
}

  1. 出现VScode或C++ BuildTools相关问题

下载安装Visual Studio生成工具
勾选其中[使用C++的桌面开发]选项,可选项中的前两项一定勾上,然后安装

  1. node-sass安装失败
    指定taobao源
    npm install --sass_binary_site=https://npm.taobao.org/mirrors/node-sass/

    或者连上墙外
    npm install --proxy=<http-proxy>

基础命令

命令含义
help查看命令帮助信息
cls清空当前屏幕区域
session查看当前会话的信息
reset重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
version输出当前目标 Java 进程所加载的 Arthas 版本号
history打印命令历史
quit退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
stop和shutdown命令一致
shutdown关闭 Arthas 服务端,所有 Arthas 客户端全部退出
keymapArthas快捷键列表及自定义快捷键
options查看或设置Arthas全局开关
阅读全文 »

RequestContextHolder

RequestContextHolder 是 Spring Framework 中用于获取当前请求上下文的 Holder 类,它可以在任何地方(即使是异步线程)获取到当前请求的上下文信息,例如 HttpServletRequest,HttpServletResponse 等。

在 Web 应用程序中,通常需要在处理请求的方法中获取 HttpServletRequest,以便在处理请求时访问请求参数,会话信息等。如果使用 ThreadLocal 存储 HttpServletRequest,则需要在处理请求的方法中传递该 ThreadLocal,这样处理请求的每个方法都需要接收 HttpServletRequest 对象作为参数,这样代码会变得繁琐,因此可以使用 RequestContextHolder 解决这个问题。

使用 RequestContextHolder 可以将当前请求上下文绑定到 ThreadLocal 中,以便在当前线程中的任何位置获取它,而不需要显式地传递 HttpServletRequest 对象。这样,我们就可以在任何需要访问请求上下文信息的地方访问它。

例如,在 Spring MVC 控制器方法中,可以使用 RequestContextHolder 获取 HttpServletRequest 对象,示例如下:

@RequestMapping("/test")
public String test() {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
// 处理请求
return "test";
}

当然,在一些特殊的场景中,也可以通过其他方式获取 HttpServletRequest 对象,例如使用 @Autowired 注解注入 HttpServletRequest 对象。但是使用 RequestContextHolder 可以让我们更方便地在任何地方访问当前请求上下文,特别是在异步线程中也可以访问到。