Tôi có chức năng cập nhật trong ứng dụng - nó tải xuống và xác minh trình cài đặt (setup.exe, được tạo bằng NSIS). Để thực sự bắt đầu cập nhật, tôi đã thực hiện một cách đơn giản:QProcess :: startDetached bị chặn bởi UAC (chạy trình cập nhật)
QString path = .. absolute path to the downloaded file ...
QProcess::startDetached(path, QStringList());
Điều này hoạt động tốt trên XP - nhưng trên Vista và Win7, không có gì xảy ra khi quá trình tải xuống hoàn tất. Nếu tôi duyệt đến bản cập nhật đã tải xuống và chạy nó theo cách thủ công, nó hoạt động tốt. Tôi cho rằng những gì đang xảy ra là UAC đang chặn trình cài đặt tại thời điểm CreateProcess, nhưng đây là nơi kiến thức của tôi hết.
Biến chứng khác - khi tôi đang chạy bản dựng gỡ lỗi từ dòng lệnh, các bước ở trên hoạt động - Tôi nhận được lời nhắc UAC và có thể chạy trình cài đặt. Đó là bản phát hành được xây dựng, bắt đầu tạo biểu mẫu trình đơn bắt đầu/lối tắt, có vấn đề - Tôi cho rằng có sự khác biệt trong mã thông báo xác thực khi chạy từ trình bao lệnh.
Sử dụng runas động từ sẽ _force_ UAC độ cao, nếu bạn không chỉ định một động từ , ShellExecute sẽ tự tìm ra nó ... – Anders
Chính xác, cảm ơn thông tin bổ sung. – ismail