微剋多資訊

 找回密碼
 註冊

Sign in with google

Google帳號登入

搜索
12
返回列表 發新帖

簽到天數: 9

該用戶今日未簽到

升級   100%

11F
發表於 2021-10-28 12:41 | 只看該作者
本帖最後由 foster 於 2021-10-28 12:43 編輯
maodou 發表於 2021-10-27 22:45
可以不用SetupComplete.cmd
把下面的code存成autounattend.xml, 放在跟Windows 11的setup.exe同一個目錄底 ...
maodou大,你這一招試了一下,只有安裝完電腦後的第一個使用者適用,之後再建立新的使用者,登入後還是原本Win 11的右鍵UI介面。

剛突然想到一招,試過後可行,就算新增使用者也適用,而且追加程式判斷後,一位新使用者只會在第一次登入時執行一次。

1.SetupComplete.cmd 其中一行執行 regedit /s Set_Run.reg ,且不執行 rmdir /s /q "%WINDIR%\Setup\Scripts"
regedit /s Set_Run.reg
rem rmdir /s /q "%WINDIR%\Setup\Scripts"

2.Set_Run.reg 內容
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run]
@="C:\\Windows\\Setup\\Script\\Shell.bat"

3.Shell.bat 檔案放在 $OEM$\$$\Setup\Scripts ,內容為
@ECHO OFF

reg query HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2} | find /i "InprocServer32"
if %ERRORLEVEL% == 0 goto end

reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve
taskkill /f /im explorer.exe & start explorer.exe

:end

這是目前想到可行的唯一方法,步驟稍嫌繁瑣,但可達到想要的目的,如有更簡便方法不吝指教!

使用道具

該用戶從未簽到

升級   0%

12F
發表於 2021-10-28 14:47 | 只看該作者
本帖最後由 maodou 於 2021-10-28 17:23 編輯
foster 發表於 2021-10-28 12:41
maodou大,你這一招試了一下,只有安裝完電腦後的第一個使用者適用,之後再建立新的使用者,登入後還是原本Win 11的右鍵UI介面。
...
這是目前想到可行的唯一方法,步驟稍嫌繁瑣,但可達到想要的目的,如有更簡便方法不吝指教!

試試看用這樣:
SetupComplete.cmd
  1. @echo off
  2. reg load HKLM\DEFAULT %SystemDrive%\Users\Default\ntuser.dat
  3. reg add "HKLM\DEFAULT\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v ClassicContextMenu /t REG_SZ /d "cmd /c reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve & taskkill /f /im explorer.exe & start explorer.exe" /f
  4. reg unload HKLM\DEFAULT

  5. cmd /c reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve & taskkill /f /im explorer.exe & start explorer.exe

  6. cd /d %~dp0
  7. attrib -R -A -S -H *.*
  8. RMDIR /S /Q "%Systemroot%\Setup\Scripts"
複製代碼
  • 給你個讚

    foster 貢獻度 +5

使用道具

簽到天數: 9

該用戶今日未簽到

升級   100%

13F
發表於 2021-10-28 21:41 | 只看該作者
本帖最後由 foster 於 2021-10-28 22:08 編輯
maodou 發表於 2021-10-28 14:47
試試看用這樣:
SetupComplete.cmd

看到maodou大有修改程式過,優點應該是可以少了一個.com檔佔空間。

maodou大先前提供的程式正要說
%WINDIR%\Setup\Script\ClassicContextMenu.com <--第一個使用者第一次登入會沒作用,最前面改成加上 cmd /c 或 start 都可以,maodou大新程式也加上 cmd /c 了。

reg load HKLM\DEFAULT %SystemDrive%\Users\Default\ntuser.dat
reg add "HKLM\DEFAULT\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v ClassicContextMenu /t REG_SZ /d "%WINDIR%\Setup\Script\ClassicContextMenu.com" /f
reg unload HKLM\DEFAULT



先前因為整合預設使用Administrator自動登入,造成關閉防火強功能失敗,藉由這次再修改一下 ClassicContextMenu.com 程式也一併都解決了。
*ClassicContextMenu.com 內容
if exist "%WINDIR%\Setup\Script\Firewall_Off.bat" ("%WINDIR%\Setup\Script\Firewall_Off.bat" && del "%WINDIR%\Setup\Script\Firewall_Off.bat")  <--將關閉防火強單獨一隻程式,因預設使用Administrator自動登入,只執行一次就刪除不再執行。

reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve
taskkill /f /im explorer.exe & start explorer.exe


*Firewall_Off.bat 內容
@echo off

netsh advfirewall set allprofile state off



基於 RunOnce 使用 Run 對此次目的有更多的好處,只有新使用者第一次登入時才會觸發,更符合一個使用者只要設定一次的原則。
雖然自己在 Run 有寫程式判斷也只會執行一次,但每次登入後就算不用做事,畫面都還是會閃個黑色dos畫面一下,其實並不是很OK。
加上預設關閉防火強功能也能達到了,這樣對我來說已經很完美了。

感謝maodou大。

其實還有個疑問,設定 RunOnce 不就代表每個新使用者第一次登入都會執行一次,為什麼還需要再一行 cmd /c %WINDIR%\Setup\Script\ClassicContextMenu.com 讓第一個使用者第一次登入才會有作用?

使用道具

該用戶從未簽到

升級   0%

14F
發表於 2021-10-28 22:26 | 只看該作者
本帖最後由 maodou 於 2021-10-28 22:39 編輯
foster 發表於 2021-10-28 21:41
其實還有個疑問,設定 RunOnce 不就代表每個新使用者第一次登入都會執行一次,
為什麼還需要再一行 cmd /c %WINDIR%\Setup\Script\ClassicContextMenu.com 讓第一個使用者第一次登入才會有作用?
修改過的ntuser.dat是要在新建另一個使用者時才會被複製套用(才會有RunOnce設定)
執行SetupComplete.cmd時, 第一個使用者已經第一次登入(他的預設值用的是沒改過的ntuser.dat, 不含SetupComplete.cmd正要新增的RunOnce設定)
所以需要再一行 cmd /c reg add... 直接去改第一個使用者的registry
後面新建的使用者, ntuser.dat已經有包含新增的RunOnce設定, 第一次登入時就會RunOnce去改registry

使用道具

簽到天數: 9

該用戶今日未簽到

升級   100%

15F
發表於 2021-10-28 23:11 | 只看該作者
maodou 發表於 2021-10-28 22:26
修改過的ntuser.dat是要在新建另一個使用者時才會被複製套用(才會有RunOnce設定)
執行SetupComplete.cmd時, ...


所以在 ntuser.dat 的設定中,RunOnce 算是特例囉?
PS:可能還有其他特例的,只是還沒碰到


因為之前其他在 ntuser.dat 的設定,所有的新增使用者(包含第一個使用者)都可以直接套用,不需再針對第一個使用者再追加程式。


之前 ntuser.dat 的一些設定:顯示搜尋圖示、不使用Cortana、顯示詳細進度,再加上新加的Win11預設選單在左邊都是如此。
reg load HKLM\DEFAULT %SystemDrive%\Users\Default\ntuser.dat
reg add "HKLM\DEFAULT\Software\Microsoft\Windows\CurrentVersion\Search" /v SearchboxTaskbarMode /t REG_DWORD /d 1 /f
reg add "HKLM\DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\OperationStatusManager" /v EnthusiastMode /t REG_DWORD /d 1 /f
reg add "HKLM\DEFAULT\Software\Policies\Microsoft\Windows\Windows Search" /v AllowCortana /t REG_DWORD /d 0 /f
reg add "HKLM\DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced" /v TaskbarAl /t REG_DWORD /d 0 /f
reg unload HKLM\DEFAULT


使用道具

該用戶從未簽到

升級   0%

16F
發表於 2021-10-28 23:32 | 只看該作者
本帖最後由 maodou 於 2021-10-29 00:35 編輯
foster 發表於 2021-10-28 23:11
因為之前其他在 ntuser.dat 的設定,所有的新增使用者(包含第一個使用者)都可以直接套用,不需再針對第一個使用者再追加程式。
哈, 是我記錯了

在安裝程式完成後執行腳本
https://docs.microsoft.com/zh-tw/windows-hardware/manufacture/desktop/add-a-custom-script-to-windows-setup?view=windows-11

在安裝程式完成後執行腳本 (SetupComplete.cmd)
1. 安裝Windows之後,但在登入畫面出現之前,Windows安裝程式在%WINDIR%\Setup\Scripts\目錄中搜尋setupcomplete.cmd檔案。
2. 如果找到setupcomplete.cmd檔案,Windows安裝程式會執行腳本

所以寫成這樣就可以了:
  1. @echo off
  2. reg load HKLM\DEFAULT %SystemDrive%\Users\Default\ntuser.dat
  3. reg add "HKLM\DEFAULT\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v ClassicContextMenu /t REG_SZ /d "cmd /c reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve & taskkill /f /im explorer.exe & start explorer.exe" /f
  4. reg unload HKLM\DEFAULT

  5. cd /d %~dp0
  6. attrib -R -A -S -H *.*
  7. RMDIR /S /Q "%WINDIR%\Setup\Scripts"
複製代碼

使用道具

簽到天數: 9

該用戶今日未簽到

升級   100%

17F
發表於 2021-10-29 10:37 | 只看該作者
本帖最後由 foster 於 2021-10-29 12:25 編輯
maodou 發表於 2021-10-28 23:32
哈, 是我記錯了

在安裝程式完成後執行腳本

其實,經多次實驗結果,重點不在 RunOnce 功能而是在執行的動作型態,因為兩種情況都會發生。

1.如果使用將指令直接寫在 RunOnce 裡,就不需要針對第一個使用者第一次登入,不需額外再執行一次指令。
reg load HKLM\DEFAULT %SystemDrive%\Users\Default\ntuser.dat
reg add "HKLM\DEFAULT\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v ClassicContextMenu /t REG_SZ /d "cmd /c reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve & taskkill /f /im explorer.exe & start explorer.exe" /f
reg unload HKLM\DEFAULT

2.如果使用將.bat寫在 RunOnce 裡,沒有執行其他.bat,就不需要針對第一個使用者第一次登入,不需要額外再執行一次指令。
cmd /c %WINDIR%\Setup\Script\ClassicContextMenu.bat

reg load HKLM\DEFAULT %SystemDrive%\Users\Default\ntuser.dat
reg add "HKLM\DEFAULT\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v ClassicContextMenu /t REG_SZ /d "%WINDIR%\Setup\Script\ClassicContextMenu.bat" /f
reg unload HKLM\DEFAULT

ClassicContextMenu.bat 內容
@echo off

reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve
taskkill /f /im explorer.exe & start explorer.exe

3.如果使用將.bat寫在 RunOnce 裡,有執行其他.bat,就需要針對第一個使用者第一次登入,需要額外再執行一次指令。
cmd /c %WINDIR%\Setup\Script\ClassicContextMenu.bat

reg load HKLM\DEFAULT %SystemDrive%\Users\Default\ntuser.dat
reg add "HKLM\DEFAULT\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v ClassicContextMenu /t REG_SZ /d "%WINDIR%\Setup\Script\ClassicContextMenu.bat" /f
reg unload HKLM\DEFAULT

ClassicContextMenu.bat 內容
@echo off

if exist "%WINDIR%\Setup\Firewall_Off.bat" ("%WINDIR%\Setup\Script\Firewall_Off.bat" && del "%WINDIR%\Setup\Script\Firewall_Off.bat")

reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve
taskkill /f /im explorer.exe & start explorer.exe

Firewall_Off.bat 內容
@echo off

netsh advfirewall set allprofile state off

============================

第三點為什麼會這樣我也不知道原因,但就是真的要再額外執行一次指令。
不過,發現在 SetupComplete.cmd 執行 netsh advfirewall set allprofile state off ,在Win11防火牆就關閉了(記得Win10就是有問題所以無解,之後再試試==>Win10 21H1 已經可用,之前某一版舊版本前不能用)。所以程式碼也簡單了。

netsh advfirewall set allprofile state off

reg load HKLM\DEFAULT %SystemDrive%\Users\Default\ntuser.dat
reg add "HKLM\DEFAULT\Software\Microsoft\Windows\CurrentVersion\RunOnce" /v ClassicContextMenu /t REG_SZ /d "cmd /c reg add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve & taskkill /f /im explorer.exe & start explorer.exe" /f
reg unload HKLM\DEFAULT

使用道具

您需要登入後才可以回帖 登入 | 註冊

本版積分規則

小黑屋|Archiver|微剋多資訊(MicroDuo)

GMT+8, 2024-11-21 18:12

Discuz! X

© 2009-2023 Microduo

快速回覆 返回頂部 返回列表