Một script nhỏ cài đặt phần mềm tự động

statistics
rkgC8qZ.png

Mình hay vọc máy tính nên máy hay bị lỗi. Ngoài ra, ở mỗi môn học phải cài 1 số phần mềm chuyên dụng. Cho nên, mình hay cài đặt lại hệ điều hành. Nhưng cài lại hệ điều hành thì việc cực nhất là cài đặt các phần mềm 🥲.

Ở các trang web khác có hỗ trợ cài đặt tự động tại sao mình không sử dụng? Lý do lớn nhất cho việc này là KHÔNG có phần mềm mình cần. Mình bên IT, nên cần làm việc với một số phần mềm chuyên dụng, mà các trình hỗ trợ cài đặt lại không có. Nên cái này ra đời.

Tính năng​

  • Tự động cài đặt ở background. Tức là bạn không cần phải click các nút "Next" nữa. Việc này tuỳ thuộc file bạn chọn download.
  • Tuỳ chỉnh phần mềm bạn muốn cài.
  • Cập nhật các phiên bản mới nhất. Phụ thuộc vào việc bạn có tìm ra link latest hay không?

Cách sử dụng​

  • Bước 1: Tìm link download trực tiếp của phần mềm.
  • Bước 2: Thêm link ấy vào trong file server.txt.
  • Bước 3: Chạy file "run.bat" để bắt đầu quá trình cài đặt.

Tuỳ chỉnh​

Ngoài việc bạn tìm link download. Thì bạn có thể thêm file cài đặt vào folder Downloaded để cài đặt.

Silent mode và Manual mode​

Silent mode​

Là chế độ mà khi cài đặt sẽ chạy dưới background. Các file có đuôi msi sẽ có thể cài đặt ở chế độ background.

Manual mode​

Là chế độ bình thường. Quá trình cài đặt sẽ giống như lúc bạn double click vào file cài đặt. Các đuôi exe thường bắt buộc bạn phải cài đặt thủ công.

Tuy nhiên, có một vài file exe cho phép cài đặt ở silent mode. Số lượng file thế này không nhiều. Cho nên, mình không thiết lập nó vào trong script. Nếu có nhiều người dùng, có khả năng mình sẽ tạo.

Cách tìm file msi​

Phần lớn, các phần mềm có phiên bản enterprise thì sẽ có file msi để cài đặt. Một số thì cài đặt silent mode trên file exe. Tuỳ thuộc vào nhà cung cấp đóng gói phần mềm.

Ở đây, mình sẽ lấy ví dụ về 7-ZIP vì nó đủ đơn giản để giới thiệu với bạn đọc. Bạn truy cập trang download của 7-ZIP download để xem thông tin chi tiết.

Nếu bạn muốn lấy link download trực tiếp, bạn nhấn chuột phải ở nút Download và chọn Copy Link thì bạn sẽ lấy được link. Sau đó, bạn thêm vào file server.txt là hoàn tất.

File msi link download trực tiếp

Ví dụ, 7-ZIP với đuôi msi: https://www.7-zip.org/a/7z2201-x64.msi
File exe link download trực tiếp

7-Zip cũng có file exe: https://www.7-zip.org/a/7z2201-arm64.exe

Link tự động cập nhật phiên bản mới nhất​

Nếu bạn có thể tìm thấy link chuyển hướng từ link cố định sang phiên bản mới nhất thì bạn không cần cập nhật link phần mềm mỗi khi có phiên bản mới ra.

Ví dụ, mình muốn download Firefox. Link download cố định của Firefox là:

https://download.mozilla.org/?product=firefox-stub&os=win&lang=en-US

Bạn thử bấm vào nó sẽ ra một link download khác là link download phiên bản hiện tại của Firefox.

Vậy việc tự động cập nhật phiên bản mới nhất sẽ phụ thuộc vào việc bạn có tìm thấy link chuyển hướng của nó hay không. Nếu không có, bạn sẽ phải dùng link cố định theo phiên bản, giống như FSCapture: https://www.faststonesoft.net/DN/FSCaptureSetup97.exe

Không thể tìm thấy link download trực tiếp hay không thể cài đặt được​

Một số phần mềm trong quá trình tải sẽ bị lỗi, hoặc phần mềm ấy không hỗ trợ thì bạn phải cài bằng tay. Bạn có thể comment bên dưới hoặc tạo issue Github để được hỗ trợ.

Một số hình ảnh​

1663312323052.png

Download

Tham khảo​

 
Sửa lần cuối:
Trả lời

Hamano Kaito

Moderator
Theo mình hiểu sơ về phần tệp tải file và tự cài như sau:
Giải thích sơ qua về các tệp trong file nén của tác giả:
  • Khi các bạn giải nén ra sẽ có tổng là 6 file nhưng chủ yếu là quan tâm 4 file là chính 2 file kia ko cần dùng đến (chủ yếu là đọc hướng dẫn lẫn nói về quyền sử dụng cho nên bỏ qua)
Vào việc chính về 4 file được đề cập:
  1. Tệp cecho.exe này mục đích là tô nền cho dòng chữ được xuất (in) ra màn hình / xem hình của chủ topic sẽ rõ
  2. Tệp run.bat này là nhân của 4 file đó tức là nó thực thi cũng như là nơi chứa tập lệnh
  3. Tệp server.txt này là nơi chứa các link (đường dẫn) tải của các tệp, ứng dụng,... mà các bạn muốn tải về
  4. Tệp wget.exe này là tools dùng để tải app...Có rất nhiều tools dạng như vầy
Về việc soi tập lệnh có trong file Run.bat sẽ có diễn giải như sau.
Đoạn chạy như quản trị viên. Đoạn lệnh sẽ kiểm tra thông qua check quyền từ cacls.exe và nhận được quyền admin thông qua chạy getadmin.vbs nằm ở đoạn :UACPrompt
Mã:
:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params= %*
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------
-----------------------------
Tiếp đến đoạn tải tệp tin có nội dung theo ý bạn đã điền trong tệp server.txt
Mã:
cecho {CF}Downloading the software from the server.txt file{#}{\n}
wget.exe -N -P Downloaded --content-disposition -i server.txt -q --show-progress
cecho sẽ làm nổi bật nội dung đoạn text
wget.exe sẽ tải tệp xuống theo các mã lệnh...
-----------------
Quá trình cài đặt
Mã:
cecho {CF}Silent mode{#}{\n}

for %%a in (Downloaded\*.msi) do (
    echo Installing %%a
    msiexec /i %~dp0%%a /qn /l*v msi.log

    if "%errorlevel%" == "0" (cecho {0A}    Done{#}{\n}) else (goto err)

)

cecho {CF}Manual mode{#}{\n}
for %%a in (Downloaded\*.exe) do (
    echo Installing %%a
    start /wait %~dp0%%a

    if "%errorlevel%" == "0" (cecho {0A}    Done{#}{\n}) else (goto err)
)

cecho {9F} Successful {#}{\n}
goto END
cecho làm nổi bật đoạn text (Cài yên lặng)
gán giá trị từ thư thực Downloaded với nội dung là toàn bộ tên tệp có đuôi là .msi. In ra màn hình giá trị đã gán và tiến hành cài đặt
Trong quá trình cài đặt nếu có lỗi sẽ đi đến báo lỗi
cecho làm nổi bật đoạn text (Tự mà cài lấy)
Gán giá trị từ thư mục Download ..........và tiến hành thực thi với giá trị là chờ...
Trong quá trình thực thi nếu có lỗi sẽ đi đến báo lỗi
cecho làm nổi bật đoạn text (thành công)
đi đến "end"
---------------------------
Lỗi
Mã:
:err
echo "Error : %errorlevel%"
In ra lỗi
----------------------
Kết thúc
Mã:
:END
pause
Chấm Hết và Chờ.............. {bye}

P/s: Đừng gạch đá mình nếu mình viết sai nha các bạn !​
 

dammage

Rìu Chiến
Theo mình hiểu sơ về phần tệp tải file và tự cài như sau:
Giải thích sơ qua về các tệp trong file nén của tác giả:
  • Khi các bạn giải nén ra sẽ có tổng là 6 file nhưng chủ yếu là quan tâm 4 file là chính 2 file kia ko cần dùng đến (chủ yếu là đọc hướng dẫn lẫn nói về quyền sử dụng cho nên bỏ qua)
Vào việc chính về 4 file được đề cập:
  1. Tệp cecho.exe này mục đích là tô nền cho dòng chữ được xuất (in) ra màn hình / xem hình của chủ topic sẽ rõ
  2. Tệp run.bat này là nhân của 4 file đó tức là nó thực thi cũng như là nơi chứa tập lệnh
  3. Tệp server.txt này là nơi chứa các link (đường dẫn) tải của các tệp, ứng dụng,... mà các bạn muốn tải về
  4. Tệp wget.exe này là tools dùng để tải app...Có rất nhiều tools dạng như vầy
Về việc soi tập lệnh có trong file Run.bat sẽ có diễn giải như sau.
Đoạn chạy như quản trị viên. Đoạn lệnh sẽ kiểm tra thông qua check quyền từ cacls.exe và nhận được quyền admin thông qua chạy getadmin.vbs nằm ở đoạn :UACPrompt
Mã:
:: BatchGotAdmin
:-------------------------------------
REM  --> Check for permissions
    IF "%PROCESSOR_ARCHITECTURE%" EQU "amd64" (
>nul 2>&1 "%SYSTEMROOT%\SysWOW64\cacls.exe" "%SYSTEMROOT%\SysWOW64\config\system"
) ELSE (
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
)

REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
    echo Requesting administrative privileges...
    goto UACPrompt
) else ( goto gotAdmin )

:UACPrompt
    echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
    set params= %*
    echo UAC.ShellExecute "cmd.exe", "/c ""%~s0"" %params:"=""%", "", "runas", 1 >> "%temp%\getadmin.vbs"

    "%temp%\getadmin.vbs"
    del "%temp%\getadmin.vbs"
    exit /B

:gotAdmin
    pushd "%CD%"
    CD /D "%~dp0"
:--------------------------------------
-----------------------------
Tiếp đến đoạn tải tệp tin có nội dung theo ý bạn đã điền trong tệp server.txt
Mã:
cecho {CF}Downloading the software from the server.txt file{#}{\n}
wget.exe -N -P Downloaded --content-disposition -i server.txt -q --show-progress
cecho sẽ làm nổi bật nội dung đoạn text
wget.exe sẽ tải tệp xuống theo các mã lệnh...
-----------------
Quá trình cài đặt
Mã:
cecho {CF}Silent mode{#}{\n}

for %%a in (Downloaded\*.msi) do (
    echo Installing %%a
    msiexec /i %~dp0%%a /qn /l*v msi.log

    if "%errorlevel%" == "0" (cecho {0A}    Done{#}{\n}) else (goto err)

)

cecho {CF}Manual mode{#}{\n}
for %%a in (Downloaded\*.exe) do (
    echo Installing %%a
    start /wait %~dp0%%a

    if "%errorlevel%" == "0" (cecho {0A}    Done{#}{\n}) else (goto err)
)

cecho {9F} Successful {#}{\n}
goto END
cecho làm nổi bật đoạn text (Cài yên lặng)
gán giá trị từ thư thực Downloaded với nội dung là toàn bộ tên tệp có đuôi là .msi. In ra màn hình giá trị đã gán và tiến hành cài đặt
Trong quá trình cài đặt nếu có lỗi sẽ đi đến báo lỗi
cecho làm nổi bật đoạn text (Tự mà cài lấy)
Gán giá trị từ thư mục Download ..........và tiến hành thực thi với giá trị là chờ...
Trong quá trình thực thi nếu có lỗi sẽ đi đến báo lỗi
cecho làm nổi bật đoạn text (thành công)
đi đến "end"
---------------------------
Lỗi
Mã:
:err
echo "Error : %errorlevel%"
In ra lỗi
----------------------
Kết thúc
Mã:
:END
pause
Chấm Hết và Chờ.............. {bye}

P/s: Đừng gạch đá mình nếu mình viết sai nha các bạn !​
AD06HjV.gif
AD06HjV.gif


xin bổ sung thêm chút, cách đây lâu rồi có lần tui cài windows xong nhưng không thể cài đặt 1 số phần mềm, mỗi lần chạy file cài là nó lại hiện thông báo đại khái như vầy (lâu quá quên rồi)
windowsInstallerIssue_332x135.jpg


từ lần đó tui mới biết hóa ra windows installer mới là trình cài đặt có sẵn trong hệ điều hành, còn cái file .msi giống như 1 cục dữ liệu mà thôi, đại khái là gần giống như máy ảo java hay framework .net vậy

-----------------
cecho {CF}Silent mode{#}{\n}

for %%a in (Downloaded\*.msi) do (
msiexec /i %~dp0%%a /qn /l*v msi.log
if "%errorlevel%" == "0" (cecho {0A} Done{#}{\n}) else (goto err)
)
đoạn code này nghĩa là lấy các file .msi trong thư mục downloaded rồi truyền nó cho chương trình msiexec ở dạng tham số dòng lệnh, cái msiexec là 1 phần trong gói windows installer và trên windows 7 thì nó nằm trong thư mục windows/system32, các bạn vô cmd gõ
c:\windows\system32\msiexec /?

nó sẽ ra như hình
Untitled.jpg

vậy là có thể hiểu được các tham số phía sau lệnh msiexec rồi
/i là install
/qn là không hiện cửa sổ giao diện (silent mode)
/l*v là xuất thông tin ra file msi.log
 

statistics

Moderator
Thành viên BQT
@Hamano Kaito @dammage | Trong quá trình em tìm hiểu thì file msi nó chứa tất cả thông tin cần thiết của ứng dụng như bác @dammage có đề cập đến, nên nó có hỗ trợ cài đặt chế độ im lặng.

Em bổ sung cuộc thảo luận như sau: Còn file exe thì phụ thuộc vào nhà cung cấp phần mềm, nó vẫn có thể cài silent được thông qua tham số /S. Nhưng mà file exe nó cho phép mình kiểm soát quá trình cài đặt (bấm next -> next -> done). Cho nên ở đa số phần mềm, nếu mình để chế độ silent mode thì nó chỉ đơn giản là treo ở đó, đợi mình "next" nhưng mà nó không hiện UI nên không thể "next" được. Hậu quả là nó "đứng chờ" cho đến khi mình tắt :D, ví dụ như Nitro Pro 13. Nhưng, một số phần mềm nó thiết lập cho cài silent sẵn như 7-ZIP, CClearner, Firefox,... thì chúng ta có thể hoàn toàn có thể sử dụng /S để tắt UI :D. Do đó nếu ta muốn cài đặt silent mode thì có thể chọn phần mềm phù hợp và đọc document của nó để cá nhân hoá (một vài phần mềm cho phép ta thiết lập các cài đặt theo ý ta muốn), thay vì sử dụng script tổng quát ở trên.

Đây là một điều thú vị khi em tìm hiểu để tạo script nhỏ hỗ trợ cài đặt.
===================
Bổ sung: Ví dụ như phần mềm này, có hỗ trợ cài đặt silent mode qua file exe:
 
Sửa lần cuối:

dammage

Rìu Chiến
@Hamano Kaito @dammage | Trong quá trình em tìm hiểu thì file msi nó chứa tất cả thông tin cần thiết của ứng dụng như bác @dammage có đề cập đến, nên nó có hỗ trợ cài đặt chế độ im lặng.

Em bổ sung cuộc thảo luận như sau: Còn file exe thì phụ thuộc vào nhà cung cấp phần mềm, nó vẫn có thể cài silent được thông qua tham số /S. Nhưng mà file exe nó cho phép mình kiểm soát quá trình cài đặt (bấm next -> next -> done). Cho nên ở đa số phần mềm, nếu mình để chế độ silent mode thì nó chỉ đơn giản là treo ở đó, đợi mình "next" nhưng mà nó không hiện UI nên không thể "next" được. Hậu quả là nó "đứng chờ" cho đến khi mình tắt :D, ví dụ như Nitro Pro 13. Nhưng, một số phần mềm nó thiết lập cho cài silent sẵn như 7-ZIP, CClearner, Firefox,... thì chúng ta có thể hoàn toàn có thể sử dụng /S để tắt UI :D. Do đó nếu ta muốn cài đặt silent mode thì có thể chọn phần mềm phù hợp và đọc document của nó để cá nhân hoá (một vài phần mềm cho phép ta thiết lập các cài đặt theo ý ta muốn), thay vì sử dụng script tổng quát ở trên.

Đây là một điều thú vị khi em tìm hiểu để tạo script nhỏ hỗ trợ cài đặt.
===================
Bổ sung: Ví dụ như phần mềm này, có hỗ trợ cài đặt silent mode qua file exe:
mấy cái next next đó thật ra là nhằm cho phép người dùng thiết đặt mấy thứ như đường dẫn, các option, nếu cài silent mode thì chắc nó sẽ dùng mặc định

mấy bữa trước cũng có topic hỏi về cài đặt tự động, tui có post 1 video hướng dẫn làm bằng autoit script, cách này mô phỏng các thao tác người dùng, vẫn mở ui nhưng thay vì người dùng nhấn next next thì script nó tự nhấn luôn, bạn nào từng xài mấy cái auto game là biết, cách này theo tui có khả năng rất lớn, có thể tự cài xong tự fix luôn, tui coi sơ thấy cũng dễ làm đối với dân không chuyên
 

statistics

Moderator
Thành viên BQT
Tôi thấy dùng rất tốt, cli thì có load gì đâu mà nặng nhỉ, tự download rồi cài quá tiện chứ, cũng như dnf, yum trên RHEL,... hay apt-get trên debian,ubuntu,...
oh, cái này khá thú vị. Cảm ơn bác đã giới thiệu.

Mình có tìm được cách export tất cả các phần mềm trong máy có trong kho của MS. Xong có thể cài đặt lại từ winget.
Xuất
Mã:
winget export -o .\winget-export.json
Cài đặt lại
Mã:
winget import -i .\winget-export.json --accept-package-agreements

Tham khảo:

Winget: Install multiple apps

=====================================
Tuy nhiên, danh sách soft không được đầy đủ cho lắm.
 
Sửa lần cuối:

caduoicakho

Rìu Sắt
oh, cái này khá thú vị. Cảm ơn bác đã giới thiệu.

Mình có tìm được cách export tất cả các phần mềm trong máy có trong kho của MS. Xong có thể cài đặt lại từ winget.
Xuất
Mã:
winget export -o .\winget-export.json
Cài đặt lại
Mã:
winget import -i .\winget-export.json --accept-package-agreements

Tham khảo:

Winget: Install multiple apps

=====================================
Tuy nhiên, danh sách soft không được đầy đủ cho lắm.
Ngoài winget chính chủ thì mình xin bổ sung thêm anh bạn Chocolately này nhé
Các cao nhân nào rành xin review, đánh giá thêm về phần mềm này để mọi người biết vợi á
Link homepage:
 

Darias

Rìu Chiến
@Hamano Kaito @dammage | Trong quá trình em tìm hiểu thì file msi nó chứa tất cả thông tin cần thiết của ứng dụng như bác @dammage có đề cập đến, nên nó có hỗ trợ cài đặt chế độ im lặng.

Em bổ sung cuộc thảo luận như sau: Còn file exe thì phụ thuộc vào nhà cung cấp phần mềm, nó vẫn có thể cài silent được thông qua tham số /S. Nhưng mà file exe nó cho phép mình kiểm soát quá trình cài đặt (bấm next -> next -> done). Cho nên ở đa số phần mềm, nếu mình để chế độ silent mode thì nó chỉ đơn giản là treo ở đó, đợi mình "next" nhưng mà nó không hiện UI nên không thể "next" được. Hậu quả là nó "đứng chờ" cho đến khi mình tắt :D, ví dụ như Nitro Pro 13. Nhưng, một số phần mềm nó thiết lập cho cài silent sẵn như 7-ZIP, CClearner, Firefox,... thì chúng ta có thể hoàn toàn có thể sử dụng /S để tắt UI :D. Do đó nếu ta muốn cài đặt silent mode thì có thể chọn phần mềm phù hợp và đọc document của nó để cá nhân hoá (một vài phần mềm cho phép ta thiết lập các cài đặt theo ý ta muốn), thay vì sử dụng script tổng quát ở trên.

Đây là một điều thú vị khi em tìm hiểu để tạo script nhỏ hỗ trợ cài đặt.
===================
Bổ sung: Ví dụ như phần mềm này, có hỗ trợ cài đặt silent mode qua file exe:
Phần tải về và hiển thị thì các bạn trên đã phân tích rồi.
Còn phần giải nén hay cài đặt tự động thì bạn nên tham khảo "Universal Extractor" vì nó tập hợp khá nhiều tool về giải nén gói cài đặt đã được đóng gói. Ngoài MSI ra còn nhiều phần mềm được đóng gói cài đặt khác nhau.