2012-06-12 26 views
11

Mam aplikację ClickOnce i potrzebuję możliwości przekazania parametrów adresu URL do niej. Na przykład użytkownik może kliknąć adres URL formularza "http://foo.bar/MyApp.application?flavor=grape", a to uruchomi moją aplikację, przekazując do niej zapytanie "? Flavor = grape".Przekazywanie parametrów adresu URL do aplikacji ClickOnce w dowolnej przeglądarce

Niestety, wygląda na to, że działa to tylko w IE po wyjęciu z pudełka. W przeglądarkach Firefox i Chrome użytkownik musi zainstalować dodatki, aby uruchomić wdrożenie ClickOnce. Moi użytkownicy pracują w ograniczonym środowisku korporacyjnym i nie mogą instalować żadnych dodatków ani niczego innego w tej sprawie (ClickOnce dla nich działa). Więc co mam zrobić ?

Jeden z hacków, o których mógłbym myśleć, to rejestrowanie mojej aplikacji jako programu obsługi plików dla jakiegoś wystarczająco unikalnego rozszerzenia pliku, takiego jak ".bugmaster". Potem - przynajmniej moja teoria poszła - mogłem kazać serwerowi wygenerować plik o nazwie "flavor_grape.bugmaster"; użytkownik kliknie adres URL wskazujący na ten plik, a następnie "Uruchom" zamiast "Zapisz", a to uruchomi moją aplikację, która następnie przeanalizuje nazwę pliku dla parametrów URL. Niestety to podejście również nie działa. Działa doskonale, gdy plik "flavor_grape.bugmaster" jest otwierany z lokalnego systemu plików, ale z jakiegoś powodu nie działa, gdy użytkownik próbuje otworzyć plik z przeglądarki.

Czy ktoś ma jakieś inne pomysły?

Odpowiedz

11

Istnieje spora sztuczka do ClickOnce, w której można zakodować parametry bezpośrednio w adresie URL, z którego korzysta program setup.exe. Tak na przykład, aby utworzyć plik setup.exe, który zawiera parametr „aromat winogronowy =”, można uruchomić następujące polecenia z wiersza poleceń:

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

używa nieudokumentowane flagę/docelowy do wyprowadzania wyniki do setup-for-grape.exe, zamiast modyfikować oryginalny plik setup.exe. Po wykonaniu tej czynności plik setup-for-grape.exe wskaże adres URL: i będzie zawierał parametr smaku = winogronowy. Zauważ, że jeśli korzystasz z podpisywania, musisz to zrobić z niezapisaną kopią kopii pliku setup.exe, a następnie podpisać ją później, ponieważ powoduje ona złamanie podpisu.

Jeśli liczba możliwych opcji parametrów jest dość ograniczona, można po prostu wygenerować pliki setup.exe dla nich wszystkich i połączyć je z witryną.

Z drugiej strony, jeśli istnieje nieograniczona liczba opcji, można skonfigurować usługę sieciową, która pobiera pewne parametry, generuje plik setup.exe z żądanymi parametrami w nim zakodowanymi i wypycha go z powrotem do klient. Użyłem tej metody do wygenerowania pliku setup.exe dla klientów podłączonych do określonych serwerów - adresy URL instalacji klienta zawierają w sobie zakodowane informacje o połączeniu z serwerem, więc po zainstalowaniu klienta automatycznie rozpoznaje, z którym serwerem się łączy.

Oczywiście, jeśli nie chcesz używać programu setup.exe lub jeśli restrykcyjne środowisko korporacyjne go nie akceptuje, wszystko idzie prosto przez okno. Ale miejmy nadzieję, że okaże się to przydatne lub przynajmniej informacyjne.

+0

Wow! Każdego dnia uczysz się nowych rzeczy. Pracuję z ClickOnce przez jakiś czas i jakoś tęskniłem za tą opcją. @Marty Dill: Czy używałeś tej techniki w przeszłości? – RLH

+0

Yup! Zobacz mój drugi akapit. Użyłem go do wygenerowania plików setup.exe, które zawierają informacje o tym, z którym serwerem należy się połączyć. Gdy system był już gotowy do działania, działał całkiem nieźle. –

+0

To naprawdę fajna sztuczka, ale niestety szczęście potrzebuję nieograniczonej liczby opcji (cóż, myślę, że technicznie jest ograniczona, ale jest ich więcej niż 1e10), a moja aplikacja musi zostać podpisana. Chociaż prawdopodobnie mógłbym skonfigurować usługę internetową do podpisywania aplikacji. To ciekawy pomysł, dzięki! – Bugmaster

Powiązane problemy