2012-06-12 28 views
11

Tôi có một ứng dụng ClickOnce và tôi cần khả năng chuyển các tham số URL vào nó. Ví dụ: người dùng có thể nhấp vào URL có dạng "http://foo.bar/MyApp.application?flavor=grape" và điều này sẽ khởi chạy ứng dụng của tôi, chuyển truy vấn "? Flavor = grape" tới nó.Chuyển các tham số URL tới ứng dụng ClickOnce trong bất kỳ trình duyệt nào

Thật không may, có vẻ như điều này chỉ hoạt động trong IE ra khỏi hộp. Trên Firefox và Chrome, người dùng phải cài đặt tiện ích bổ sung để triển khai ClickOnce hoạt động. Người dùng của tôi làm việc trong một môi trường công ty hạn chế và không được phép cài đặt bất kỳ tiện ích bổ sung nào hoặc bất kỳ thứ gì khác cho vấn đề đó (ClickOnce không hoạt động với chúng). Vì vậy, tôi phải làm gì?

Một bản hack mà tôi có thể nghĩ đến là đăng ký ứng dụng của tôi dưới dạng trình xử lý tệp cho một số phần mở rộng tệp duy nhất đầy đủ, chẳng hạn như ".bugmaster". Sau đó - hoặc như vậy lý thuyết của tôi đã đi - tôi có thể có máy chủ web của tôi tạo ra một tập tin có tên là "flavor_grape.bugmaster"; người dùng sẽ nhấp vào một URL trỏ đến tệp đó, sau đó chọn "Chạy" thay vì "Lưu" và điều này sẽ khởi chạy ứng dụng của tôi, sau đó sẽ phân tích cú pháp tên tệp cho các tham số URL. Thật không may, cách tiếp cận này không hoạt động. Nó hoạt động hoàn toàn tốt khi tệp "flavor_grape.bugmaster" được mở từ hệ thống tệp cục bộ, nhưng vì một số lý do, điều này không hoạt động khi người dùng cố gắng mở tệp từ trình duyệt.

Có ai có ý tưởng nào khác không?

Trả lời

11

Có một mẹo nhỏ tiện lợi để ClickOnce trong đó bạn thực sự có thể mã hóa các tham số trực tiếp vào URL được sử dụng bởi setup.exe. Vì vậy, ví dụ, để tạo ra một setup.exe có chứa tham số 'flavor = nho' của bạn, bạn có thể chạy sau từ dòng lệnh:

copy setup.exe setup-for-grape.exe 
setup.exe -url="http://foo.bar/MyApp.application?flavor=grape" /dest=setup-for-grape.exe 

này sử dụng không có giấy tờ cờ/dest để sản xuất các kết quả cho tập tin setup-for-grape.exe, thay vì sửa đổi setup.exe gốc. Sau khi thực hiện việc này, setup-for-grape.exe sẽ trỏ đến URL của bạn sẽ chứa thông số flavor = grape của bạn. Lưu ý rằng nếu bạn đang sử dụng ký tên, bạn sẽ cần phải thực hiện việc này với một bản sao chưa được ký của tệp setup.exe của bạn, sau đó ký tên sau đó, vì nó phá vỡ chữ ký.

Nếu số lượng lựa chọn tham số có thể là khá hạn chế, bạn chỉ có thể tạo setup.exe cho tất cả và liên kết với chúng từ trang web của bạn.

Mặt khác, nếu có số lượng lựa chọn không giới hạn, bạn có thể thiết lập dịch vụ web có một số tham số, tạo tệp setup.exe với tham số mong muốn được mã hóa trong đó và quay trở lại khách hàng. Tôi đã sử dụng phương pháp này để tạo ra setup.exe cho các máy khách được kết nối với các máy chủ cụ thể - URL cài đặt máy khách có thông tin kết nối máy chủ được mã hóa trong chúng, vì vậy khi một máy khách được cài đặt nó sẽ tự động biết máy chủ nào kết nối đến.

Tất nhiên, nếu bạn không muốn sử dụng setup.exe, hoặc nếu môi trường công ty hạn chế của bạn không cho phép, tất cả điều này sẽ đi thẳng ra ngoài cửa sổ. Nhưng hy vọng bạn sẽ thấy nó hữu ích, hoặc ít nhất là thông tin.

+0

Wow! Bạn học những điều mới mỗi ngày. Tôi đã làm việc với ClickOnce một thời gian, và tôi bằng cách nào đó đã bỏ lỡ tùy chọn này. @Marty Dill: Bạn đã sử dụng kỹ thuật này trong quá khứ chưa? – RLH

+0

Yup! Xem đoạn cuối cùng thứ hai của tôi. Tôi sử dụng nó để tạo ra setup.exe có chứa thông tin về những gì máy chủ để kết nối với. Một khi hệ thống đã được tất cả và chạy nó làm việc khá độc đáo. –

+0

Đây thực sự là một mẹo nhỏ gọn, nhưng không may mắn tôi cần một số lượng tùy chọn không giới hạn (tốt, tôi đoán là nó bị hạn chế, nhưng có hơn 1e10 trong số đó) và ứng dụng của tôi không cần phải ký. Mặc dù tôi có thể cũng có thể thiết lập dịch vụ web để đăng ký ứng dụng. Đó là một ý tưởng thú vị, mặc dù, cảm ơn! – Bugmaster

Các vấn đề liên quan