Tôi mới sử dụng NSIS và tôi cần biết rằng trong trình gỡ cài đặt, cách tôi có thể kiểm tra xem ứng dụng (có trong C++) đang chạy và đóng ứng dụng đó trước khi gỡ cài đặt.Kiểm tra xem ứng dụng có đang chạy trong NSIS hay không trước khi gỡ cài đặt
Trả lời
Tùy thuộc vào ứng dụng, bạn có một vài lựa chọn:
- Nếu ứng dụng của bạn có một cửa sổ với một tên lớp hơi duy nhất, bạn có thể sử dụng FindWindow
- Nếu ứng dụng của bạn tạo ra một đối tượng hạt nhân tên (Mutex vv), bạn có thể kiểm tra nó bằng cách gọi đúng bản win32 API với các plugin hệ thống
- Sử dụng một plugin bên thứ 3 như FindProcDLL
Sử dụng plugin NsProcess. Tải xuống tại đây ->NSProcess
Cách sử dụng? Đơn giản như:
${nsProcess::KillProcess} "${APP_EXE}" $R4
nơi APP_EXE là tên của ứng dụng của bạn ...
Các tải cũng sẽ cho bạn biết làm thế nào để sử dụng nó ... :)
Đây là một nhẹ hơn phiên bản thân thiện với người sử dụng NSProcess rằng yêu cầu các ứng dụng để đóng chứ không phải là chấm dứt nó (Owen câu trả lời)
${nsProcess::FindProcess} "${APP_EXE}" $R0
${If} $R0 == 0
DetailPrint "${AppName} is running. Closing it down"
${nsProcess::CloseProcess} "${APP_EXE}" $R0
DetailPrint "Waiting for ${AppName} to close"
Sleep 2000
${Else}
DetailPrint "${APP_EXE} was not found to be running"
${EndIf}
${nsProcess::Unload}
Giải pháp tốt nhất! – MiBol
Chỉ cần chắc chắn rằng điều đầu tiên mà cài đặt hoặc un-i nstall không phải là để xóa tất cả các tập tin xyz.tmp trong% TEMP (hoặc bất kỳ thư mục ghi ứng dụng khác) trước khi dưới đây cho vòng lặp chạy. Không cần plugin.
!macro IsRunning
ExecWait "cmd /c for /f $\"tokens=1,2$\" %i in ('tasklist') do (if /i %i EQU xyz.exe fsutil file createnew $TEMP\xyz.tmp 0)"
IfFileExists $TEMP\xyz.tmp 0 notRunning
;we have atleast one main window active
MessageBox MB_OK|MB_ICONEXCLAMATION "XYZ is running. Please close all instances and retry." /SD IDOK
Abort
notRunning:
!macroEnd
- 1. Cách kiểm tra theo chương trình xem ứng dụng có đang chạy ở chế độ gỡ lỗi hay không?
- 2. WiX đóng ứng dụng trước khi gỡ cài đặt - đóng ứng dụng đang mở tin nhắn
- 3. Có sử dụng GetProcessesByName hay nhất để kiểm tra xem một tiến trình đang chạy không?
- 4. Nghe phát sóng Trước khi gỡ cài đặt ứng dụng
- 5. ANDROID - cách kiểm tra xem hoạt ảnh có đang chạy hay không trước khi bắt đầu hoạt ảnh mới
- 6. Kiểm tra xem Chronometer có đang chạy
- 7. Kiểm tra xem tệp có đang được sử dụng hay ứng dụng nào không?
- 8. Bootstrapper: Kiểm tra xem msi phiên bản được cài đặt trước khi chạy
- 9. Kiểm tra xem tập lệnh php có đang chạy không
- 10. Kiểm tra xem mã đang chạy trên GPU hay CPU
- 11. Cách kiểm tra xem SWF có đang chạy dưới dạng ứng dụng AIR không?
- 12. HTML5/JS - kiểm tra xem ứng dụng đó có đang hoạt động hay không
- 13. Gỡ cài đặt không thành công vì chương trình đang chạy. Làm thế nào để thiết lập Inno Setup kiểm tra quá trình chạy trước khi thử xóa?
- 14. Cách kiểm tra giá trị Xmx đã định cấu hình cho ứng dụng java đang chạy
- 15. Kiểm tra xem ứng dụng Google Maps có được cài đặt trong iOS 6
- 16. Android: Kiểm tra xem dịch vụ có đang chạy hay không. bindService
- 17. Trình cài đặt NSIS kiểm tra .NET Framework
- 18. Phát hiện xem ứng dụng đã được gỡ cài đặt
- 19. Kiểm tra xem chuỗi Win32 có đang chạy hay đang ở trạng thái tạm dừng
- 20. Làm cách nào để thực thi trình gỡ cài đặt NSIS từ bên trong trình cài đặt NSIS khác và đợi nó kết thúc?
- 21. Cài đặt Inno - Kiểm tra xem tệp có tồn tại ở đích hay không nếu không hủy cài đặt
- 22. UIAutomation: Kiểm tra xem phần tử có tồn tại hay không trước khi nhấn
- 23. Android: BroadcastReceiver khi cài đặt/gỡ cài đặt ứng dụng
- 24. Cách kiểm tra theo chương trình nếu ứng dụng được cài đặt hay không trong Android?
- 25. Cách kiểm tra nếu Python đang chạy từ virtualenv trong khi cài đặt gói
- 26. Cách kiểm tra xem ứng dụng WPF có đang chạy không?
- 27. Tệp Kiểm tra WiX tồn tại trước khi Cài đặt
- 28. Kiểm tra xem quy trình có đang chạy
- 29. Xác định xem ứng dụng có đang chạy trong xanh hay không
- 30. Kiểm tra xem ứng dụng có đang mở trong sự kiện GCM onMessage không?
FindProcDLL sẽ không làm việc với phiên bản cuối cùng của NSIS như các nhận xét này, 2,46, phát hành vào năm 2009. – Rex
Một lựa chọn khác là thế này: 'ExecWait taskkill/IM program_name/F' –