Ngoài các câu trả lời của MikeBazs, tôi muốn cung cấp "Workaround" sau khi cài đặt Click-Once-Application "không tương tác" và "gần như im lặng" (Người dùng nhìn thấy tiến trình -window trong khi cài đặt, không cần click và/hoặc có thể)
có một vài "vấn đề" để xem xét, nhưng nếu bạn làm theo hướng dẫn này, kết quả sẽ là những gì bạn cần:
1.) Đăng ký ứng dụng của bạn: Trong phòng thu trực quan, bạn có thể dễ dàng đăng ký ứng dụng của mình bằng chứng chỉ của riêng bạn, điều đó không lớn thỏa thuận.
2.) Distribute giấy chứng nhận: Để tránh hộp thoại, nếu ứng dụng cần phải được cài đặt, bạn cần phải phân phối chứng chỉ của bạn đến các cửa hàng sau đây trên bất kỳ máy (Sử dụng GPO cho rằng): Trusted Publishers
và Trusted Root Certification Authorities
Giờ đây, người dùng có thể cài đặt ứng dụng chỉ bằng một cú nhấp chuột - không có câu hỏi bảo mật. Nhưng chúng tôi muốn Zero, nhấp chuột:
3.) Tạo một kịch bản PowerShell, nằm trên một máy chủ, mà gọi setup.exe của ứng dụng của bạn:
if (-not (Test-Path env:APPInstalled)){
Start-Process "\\server\share\Application\setup.exe"
# Set Flag for "Installed"
[Environment]::SetEnvironmentVariable("APPInstalled", "1", "User")
}
tôi đã sử dụng một biến với người sử dụng môi trường được gọi là APPInstalled
để xác định xem ứng dụng có cần cài đặt hay không.
Giờ đây, người dùng có thể thực thi tập lệnh đó, chỉ nhận được cài đặt một lần mà không cần xác nhận thêm. Nhưng ứng dụng sẽ bắt đầu sau khi cài đặt.
4.) Sửa mã nguồn của ứng dụng của bạn: Tôi đã sử dụng tệp giả để phát hiện đường đi của ứng dụng. Nếu nó là firstrun, (tức là ngay sau khi cài đặt) Tôi chỉ đóng cửa một lần nữa:
private void Form1_Load(object sender, EventArgs e)
{
//first run? That's a initial deployment, close application.
if (!File.Exists("C:\\some\\static\\path\\notfirstrun.dat"))
{
File.WriteAllText("C:\\some\\static\\path\\notfirstrun.dat", "1");
Application.Exit();
}
Bây giờ, người dùng có thể thực hiện thaht kịch bản, chỉ nhận được một cài đặt một lần không có thêm xác nhận yêu cầu và các ứng dụng không "Tự động bắt đầu" sau khi thiết lập.
Nhưng chúng tôi muốn tránh "click" cũng như:
Nếu chúng ta thiết lập các kịch bản PowerShell trong Startup-Folder - nó bật lên, đó là xấu xí. Nếu chúng ta đặt nó là Login-Script, nó không chạy trong ngữ cảnh người dùng, được yêu cầu cho Click-Once.
Như một giải pháp cho vấn đề "này", bạn có thể quấn nó bên trong tập lệnh vbs
, gọi tập lệnh PowerShell.Lưu ý, rằng đây được thực hiện trong bối cảnh người sử dụng, vì vậy người sử dụng cần quyền để thực hiện powershell-scripts:
Dim objShell
Set objShell=CreateObject("WScript.Shell")
strCMD="powershell.exe -sta -noProfile -NonInteractive -nologo -ExecutionPolicy Bypass -f \\server\share\scripts\install_App.ps1"
objShell.Run strCMD,0,True
Cuối cùng, sử dụng một GPO để tạo ra một "công tác" trong "Task-Scheduler" mà chạy vbs
-script 30 giây sau khi đăng nhập, chỉ khi người dùng đăng nhập.
Tất cả người dùng sẽ thấy là tiến trình "cài đặt".
Tóm lại:
- Đăng mã của bạn
- Distribute chứng chỉ của bạn
- kích hoạt quá trình cài đặt với một kịch bản PowerShell
- bọc rằng PowerShell kịch bản bên trong một kịch bản vbs inivisible
- triển khai vbs script cho mỗi máy, sử dụng task-scheduler để đảm bảo nó chạy trong ngữ cảnh của người dùng.
Cảm ơn Robin, đó cũng là những gì các nghiên cứu của tôi đã cho tôi thấy. Đây thực sự là một gói được triển khai trong môi trường doanh nghiệp của tôi. Đó là điều tôi muốn nhân viên của mình chạy mọi lúc, vì vậy cài đặt im lặng được ưu tiên. – Joe
Cài đặt im lặng cũng hữu ích cho quản trị viên mạng viết kịch bản để triển khai cho người dùng. – Mike
Nó không có vẻ công bằng với -1 câu trả lời của tôi khi nó chính xác, chỉ vì bạn không thích câu trả lời. – RobinDotNet