Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , 120 reacties

Microsoft-ontwikkelaar Yochay Kiriaty roept zijn collega-developers op om in hun software voortaan niet langer de Windows-versie te controleren. Volgens Kiriaty zorgen slecht uitgewerkte versiechecks te vaak voor problemen, zelfs bij upgrades.

Kiriaty noemt in zijn blogposting twee structurele problemen die optreden bij het controleren welke Windows-versie een gebruiker draait. Ten eerste falen veel versiechecks op het versienummer van Windows. Zo willen sommige applicaties niet opstarten omdat een gebruiker een upgrade heeft uitgevoerd van Windows XP met versienummer 5.1 naar Windows Vista met versienummer 6.0. Dat komt omdat het controlemechanisme uitsluitend kijkt naar het zogenaamde minor version number, het cijfer achter de punt, en niet naar het major version number, dat voor de punt staat: omdat de minor-waarde is verlaagd, weigert de applicatie op te starten. Dergelijke problemen kunnen ontstaan na de installatie van Windows-servicepacks.

Een tweede veelvoorkomend probleem is dat bepaalde software weigert te starten op Windows-versies die door de ontwikkelaars niet zijn getest. Daardoor kan bijvoorbeeld software die probleemloos draait op Vista, dienst weigeren op Windows 7, ook al zou de software technisch gezien prima op het nieuwe OS kunnen draaien. Microsoft biedt al sinds Windows 95 een methode om koppige applicaties dan alsnog aan de praat te krijgen: de compatibility-modus, die via de eigenschappen-dialoog ingesteld kan worden. Een structurele oplossing is dit echter niet.

Kiriaty noemt een aantal mogelijkheden om de implementatie van versiecontroles te verbeteren, al ziet hij ze het liefst geheel verdwijnen. Volgens de Microsoft-ontwikkelaar is het beter om te controleren op de beschikbare functionaliteit van een Windows-versie, bijvoorbeeld door te kijken of een bepaalde DirectX-api aanwezig is. Mocht een ontwikkelaar zich toch genoodzaakt voelen om uitsluitend op het OS-versienummer te controleren, dan geeft Kiriaty voorbeeldcode voor een controlemechanisme dat moet voorkomen dat applicaties in toekomstige Windows-versies dienst weigeren.

Compatibility-venster

Moderatie-faq Wijzig weergave

Reacties (120)

Leuk dat in de tussentijd MS zich hier echter zelf schuldig aan maakt bij al zijn enterprise producten (Exchange, SharePoint, ISA etc. controleren allemaal de Windows versie en sommige ervan willen ook niet installeren op een nieuwere versie)
Microsoft is al lang niet meer het grote monolytische blok dat mensen ooit voor ogen hadden (als het al ooit heeft bestaan). Er werken tienduizenden, zoniet honderdduizenden mensen voor dit bedrijf en vaak is het enige dat hen verbind het bedrijfslogo.

Merk ook op dat het hier om een blogpost van een individuele werknemer gaat en geen deel uitmaakt van de officiŽle bedrijfsvisie.

Ik vind een bepaald product van ons bedrijf ook grote bagger. Moest ik dat in een blog zetten, dan wil dat toch niet plots zeggen dat dit de visie van het bedrijf is ???

Bij Microsoft is het zelfs zo erg dat volledige programmeurteams hun producten soms eerst onder de aandacht moeten brengen in de media voordat de bedrijfstop er zelf iets in zal zien, laat staan in geÔnteresseerd zijn.

En denk nu niet dat dit enkel maar bij Microsoft gaat hoor, want bij Google hebben ze evengoed hun 'creative 20%' waar ze in kunnen doen wat ze willen, zonder inmenging van bazen of beslissingsnemers.
Volgens mij heeft dit enkel te maken met het principe dat die programma's op bepaalde specifieke platformen moeten draaien vanwege de onderliggende features. Daarbij moeten bepaalde programma's ook checken of je bepaalde updates al hebt geinstalleerd.

het gaat dan niet om het 'correct' checken van versienummer, maar over de brakheid waarmee het nu wordt gedaan. Ga dan niet zitten kutten met halfwerkende, maar doe het dan gewoon niet.. dat is wat ze hier bedoelen.

Simpel voorbeeld van flash, sommige sites willen geen flash afspelen omdat ze daar zo brak gemaakt zijn dat ze flash 9 niet herkennen. (u heeft flash 6 of ouder).
Dat niet alleen, ik probeerde een programma te installeren wat weigerdeomdat ik eerst IE moest updaten naar versie zoveel terwijl ik IE niet eens gebruik of wil gebruiken e het programma dit ook helemaal niet nodig zou moeten hebben.. (even vergeten welk programma het ook alweer was).

Dat soort idiote vereisten moeten ze echt eens beter over nadenken..
Heb ik ook wel eens gehad, maar dan blijkt het soms subtieler te zijn: nieuwe versie IE kwam met nieuwe versie van de Coolbar en die werd wel gebruikt door de app. Omdat de coolbar alleen te updaten was door IE te updaten.... jawel. Daarom is packaging op Windows (installers maken e.d.) zo ontzettend vervelend in tegenstelling tot OS'en waarbij ieder brokje (iedere DLL zo'n beetje) een eigen component is waar je op kunt dependen en afzonderlijk kunt installeren. Maar ja, dit vereist wel een schone code-base en (veel) goede wil.
Ooh bold statement, vooral omdat je met brokjes DLL's aanhaalt wat nu juist iets is wat windows heeft (bedacht/ zo genoemd).

Verder is het veel vaker nodig dan je denkt om IE te update voor sommige apps omdat IE veel meer functies bied dan zo 1,2,3 lijkt.

Waaronder het feit dat IE vaak de helpfiles rendered en ook vaak andere interne beelden (waarom zou je 2x code daarvoor schrijven als je gewoon IE kunt aanroepen, hier wordt IE dan even gezien als gewoon weer zo'n dll-etje dat een bepaalde functionaliteit verzorgt, hier dus renderen, daarom kon IE niet zo makkelijk uit windows, het is een integraal deel, hoewel gewoon ie.exe wel weg kan (dat is wat er gebeurt als je hem deinstalleerd).

[ontopic]

Goed dat ze dit nu zo duidelijk communiceren want dit is toch een van de absurdste redenen dat veel leuke software ineens niet meer werkte op Vista (5.1->6.0) en een van de redenen dat Windows 7 interern 6.x gaat heten (hoewel dit niet de enige was, 7 is meer een refresh + SP voor Vista).
wat een lul verhaal, - ie.exe is is nagenoeg NIETS anders dan explorer.exe in met een andere default behaviour,

als je IE verweiderd gaat het om de hele IE base.. en dat kun je niet anders dan door met inf bestanden te gaan kloten. (zoals nlite dat ook doet)...

dat je mogelijk de Renderer in tact zou willen laten had eigenlijk moeten kunnen (als het losse brokjes os had geweest) . het deed dat mensen weg willen heeft voor namelijk te maken met het kunnen laden van externe code of het leggen van verbindingen via de ip stack.

ALS ie goed was geprogrammeerd had je een aantal losse componenten...
namelijk namelijk de renderer ... de toolkit ... de protocol handler ... en mogelijk nog wat andere dingetjes. deze zouden onafhankelijk van elkaar moeten kunnen werken. en ook onafhankelijk in andere aps geladen moeten kunnen worden.
Vriend, je kletst uit je nek:
nieuws: Microsoft haalt IE uit Europese Windows 7

ie.exe is een echte applicatie. Daarnaast zijn er essentiele renderings DLLs.
ie.exe is te verwijderen in Windows 7, de rendering DLLs niet.
Volgens mij heeft dit enkel te maken met het principe dat die programma's op bepaalde specifieke platformen moeten draaien vanwege de onderliggende features.
Maar we moesten toch op features checken, en niet op versienummer?

In JavaScript is het betrekkelijk gemakkelijk om te controleren of de API aanwezig is, maar is dat bij Windows ook helemaal het geval? Van dynamic link libraries weet ik dat je inderdaad kunt controleren of een bepaalde functie geŽxporteerd wordt, ook bij de MS-COM API is er een mogelijkheid om te controleren of een bepaalde interface geÔmplementeerd wordt. Maar zijn dat de enige manieren om de Windows API te benaderen?

Desalniettemin, de meeste functionaliteit is wel via MS-COM of DLL-exports te benaderen, Microsoft had dat dan dus ook moeten doen...
Wat een onzin. MS test weldegelijk op versienummers, zelfs als de onderliggende features er gewoon zijn. Probeer bijvoorbeeld voor de grap maar eens Windows Live applicaties te installeren op Windows XP 64. Dat wil dus niet, omdat de installer weigert. Heb je eenmaal de binairies, dan werkt het prima.
Wellicht dat het Exchange verhaal de reden is voor zijn betoog. 1 developer bij MS kan in zijn eentje niet verantwoordelijk zijn voor alle MS producten. Het is goed dat het onderwerp wordt aangesneden en uit welke hoek dat komt doet er niet toe.

Men moet ergens beginnen nietwaar?
Misschien omdat Microsoft dit wťl bewust heeft gekozen en voor nieuwere versies het ook eerst wil testen.
Outlook Webaccess niet te vergeten. Zet in Firefox "MSIE" in je User Agent en je krijgt de volledige versie, die op een paar kleine details na zelfs werkt. Zonder "MSIE" in je User Agent krijg je de Light versie...
Outlook Webaccess niet te vergeten. Zet in Firefox "MSIE" in je User Agent en je krijgt de volledige versie, die op een paar kleine details na zelfs werkt. Zonder "MSIE" in je User Agent krijg je de Light versie...
Ik had het nooit geprobeerd, had goede hoop maar ik zou het zelfs geen werken willen noemen. Grote error boven in beeld en ik kan het postvak in niet eens laden. Nee, kennelijk doet MS dat toch terecht.

Ze zouden in plaats daarvan OWA beter compatible aan standaarden kunnen maken maar da's een ander verhaal.
Eh, we hebben het over een VERSIE check, niet over een browser type.
En een browser check is geen versie check ?
nee, in dit geval niet.
firefox is namelijk geen oudere/nieuwere versie van internet explorer.
het is een compleet andere browser.
Ja en? Het punt is dat OWA gewoon werkt op Firefox (alle API's zijn er). Met een API check had het gewerkt met een versie check niet. Stel je voor dat Wine op een gegeven moment echt alles draait en alle MS software begint met if( isWine()) abort(); dan zal je toch ook zeggen dat dat als een tang op een varken slaat. Checken op versies of specifieke vendors/producten laat alleen maar zien dat je angstig bent je markt te verliezen. Als iemand besluit om je product op een niet ondersteunt OS / Browser whatever in te zetten los je dat op door gewoon geen support op dit platform te leveren, niet door panisch allerlei controles in te bouwen die niemand echt helpen.
Exchange 2003 werkt dat toch echt niet (net nog geprobeerd, totaal onbruikbaar). En 2007 lijkt me ook niet. Veel ActiveX prut enzo. Tenzij je IEtab hebt.

Exchange 2007 nu ook getest, werkt dus ook voor geen meter. Dus het is totale klets wat hierboven positief wordt beoordeeld. Vond het al een rare opmerking die moeilijk waar kon zijn.

[Reactie gewijzigd door Rinzwind op 7 augustus 2009 09:05]

Heel juist MinkeN. Verander de wereld, begin bij jezelf zou ik zo zeggen.
Leuk dat in de tussentijd MS zich hier echter zelf schuldig aan maakt bij al zijn enterprise producten (Exchange, SharePoint, ISA etc. controleren allemaal de Windows versie en sommige ervan willen ook niet installeren op een nieuwere versie)
Microsoft, de maker van de producten waarop en waar vanuit de versie-check wordt uitgevoerd, zal het wel iets beter weten dan de rest van de andere derde-partij makers die geen bron-code hebben - denk ik, denk je niet?
Beetje overbodige opmerking dus...

[Reactie gewijzigd door HoeZoWie op 7 augustus 2009 10:46]

Overbodige versiechecks... bedoelen ze soms zaken als DirectX 10 die niet op XP wil installeren, of IE 7 en 8 die het vertikken op win2000?
Nee, dat bedoelen ze juist niet. Dat zijn nuttige versie checks die wel mogen, en er wordt in het bronartikel dus ook gewoon voorbeeldcode voor gegeven om dat te doen. DX10 heeft dingen in het OS nodig die XP gewoon niet levert en niet kan leveren. IE7+ gebruikt APIs die niet in Windows 2000 zitten, dus die kan daar niet op draaien.

[Reactie gewijzigd door _js_ op 6 augustus 2009 23:55]

DX10 heeft dingen in het OS nodig die XP gewoon niet levert en niet kan leveren
Er is allang aangetoond dat dat niet waar is, het is een kunstmatige beperking dat DX10 niet om XP draait, met een paar aanpassingen en DLL's kan het wel draaien op XP.

Het is nogal wrang dat dergelijke opmerkingen van MS komen terwijl ze zelf dus regelmatig kunstmatige beperkingen hebben ingebouwd om consumenten naar hogere windows OS te duwen. Ook bij MS games hebben ze soms geweigerd op te starten op win2000 terwijl het prima draait als je het omzeilt.
Geef eens een link.
Alle projecten die ik af en toe eens bekijk lukt het niet om compatibele Dx10 op XP te krijgen. Is gewoon veel geblaat ontstaan toen iemand door een hack Crysis op very high kon zetten maar hij had wel niet alle Dx10 effecten. Sinds dan zijn er mensen die hun tijd verspillen aan een graal die niet bestaat, ga gewoon mee met het nieuwe OS als je wil meegaan met de nieuwste games.
Of je vertelt je ontwikkelaars het GOED te doen. Komop... hoe stom ben je om alleen de minor versie te controleren... ik ben geen doorsnee windows ontwikkelaar maar dat is gewoon stom.

Ik ben sowieso geen voorstander van omgevings-controle. Ik test liever met een stukkie code hoe de omgeving reageert op bepaalde acties om zo te achterhalen welke methode ik moet gebruiken en of de omgeving compatible is.
Helemaal mee eens! Wat voor redenatie is dat nou "iedereen doet het fout, dus moeten we het voortaan niet meer doen"...!? Net wat Gamebuster zegt, dan kun je beter aanmoedigen dat iedereen het goed doet!

Bovendien, misschien moet MS eerst eens zelf een fatsoenlijke versie-check routine aanbieden.
Typically, VerifyVersionInfo returns a nonzero value only if all specified tests succeed. However, major, minor, and service pack versions are tested in a hierarchical manner because the operating system version is a combination of these values. If a condition exists for the major version, it supersedes the conditions specified for minor version and service pack version. (You cannot test for major version greater than 5 and minor version less than or equal to 1. If you specify such a test, the function will change the request to test for a minor version greater than 1 because it is performing a greater than operation on the major version.)
Dat is niet wat hij zegt. Hij zegt alleen maar dat Microsoft (en vele Windows gebruikers) regelmatig aanlopen tegen software die op een onjuiste manier de versie controleren.

Kiriaty geeft alleen maar aan dat het beter is om te controleren of bepaade features aanwezig zijn. Dit omdat bepaalde features soms ook voor oudere versies beschikbaar worden gemaakt. Als je dan toch echt op versies wilt controleren, doe het dan goed. VerifyVersionInfo is de beste en makkelijkste methode.

Verder betoogt de man om helemaal geen versie controle te doen. Voor veel software is die controle namelijk ook helemaal niet nodig. De meeste software zal ook op een nieuwe versie van Windows prima draaien. En mocht je dan toch features gebruiken die niet meer ondersteund worden dan moet je software daar mee om kunnen gaan. Controleer dus return values en ga er niet klakkeloos van uit dat het wel zal werken.

Wat je met die vetgedrukte zin wilt aangeven weet ik niet. Die onmogelijke check die ze als voorbeeld noemen is ook redelijk onzinnig dus dat je daar niet op kan checken lijkt me logisch.
Is het niet handiger om bij installeren (of opstarten) meteen te testen of alles wat je nodig hebt wel aanwezig is? Lijkt me handiger dan zonder meer opstarten en pas later protesteren. Anders krijg je dadelijk dat iemand eerst een hele brief zit te tikken en daarna pas te horen krijgt dat ie die vanwege compatibiliteitsproblemen niet kan printen (lam voorbeeld, maar je snapt het idee). Dat zou ik liever meteen geweten hebben...

Misschien heb ik iets gemist / begrijp ik MSDN verkeerd, maar volgens mij staat daar dat ik niet kan controleren op bijvoorbeeld versie 6.0, 6.1, 7.0, 7.1, etcetera. Waarom zou dat onzinnig zijn...?
Er staat je kan niet controleren op >=5 en <=1. Dit staat namelijk versies 5.1, 6.0, 6.1 toe. Maar niet 5.2, 6.2 e.d.

Oftewel Controleer eerst het major number (voor de punt) en maak beslissingen op basis van dat nummer. De volgende stap is controleren op basis van het minor number Voor zover relevant. Als ik nu software zou maken die later een major number 9 vind heeft het weinig zin om me druk te gaan maken of het versie 9.1 of 9.2 is. Het is een voor mij totaal onbekende toekomstige windows versie waar ik niets van weet.

Vandaar dat het beter is om specifiek op functionaliteiten te testen. Als die functionaliteiten dan nog bestaan (en je controle op een goede manier gebeurd) kun je tzt gewoon testen dat die bestaat en weet je of je applicatie nog goed werkt. Hoef je dus geen waarschuwing te geven in de trant van "Onbekende windows versie. Wilt u doorgaan Ja/Nee"
Hiermee maakt microsoft een heel goed punt. Ik ben al behoorlijk wat keren tegenaan gelopen tegen die versie-checks die geen enkel nut hebben. Vreemd genoeg zijn dat vaak ook precies de software leveranciers die ronduit traag zijn met behoorlijke updates te leveren. Wat op mij als zeer arrogant over komt:" JIj eind gebruiker zoek het maar uit en installeer maar lekker een 10 jaar oud OS" .. en dat met applicaties van vaak nog geen 2 jaar oud..
Geheel met je eens.

Ik denk trouwens dat bedrijven dit vooral doen om support redenen. Als de software niet werkt op een niet-ondersteund besturingssysteem, dan krijgen ze daar ook geen support calls voor. Een zeer ouderwetse en gedateerde manier van denken over software.
Jah ach hij heeft ook eigenlijk wel een beetje gelijk.
Een hele tijd geleden haalde ik startrek the borg weer eens uit de kast.
Een spel ontwikkelt voor windows 95.

Bij het opstarten van de installer onder vista zij de installer heel koppig. mag alleen onder windows 95 geÔnstalleerd worden voer een upgrade uit :+

Compatibiliteit modus loste het niet op.
Uiteindelijk in een vmware machine Windows 95 geinstalleerd vanaf 6 virtuele floppy's en daarna de geÔnstalleerde bestanden overgekopieert naar vista. werkte perfect.
Hier zoiets gelijkaardig, wou 'RC Cars' nog eens spelen, maar kwam uit voordat Vista op de markt was, compatibility modus deed niets, hij wou zelfs niet installeren. Uiteindelijk een kopie moeten maken van de schijf, de 'installer.msi' manueel moeten bewerken opdat de versie-check eruit zou vliegen en opnieuw geprobeerd -> spel werkt perfect zonder enige compatibiliteitsproblemen...
Ik stel dan voor om incompetente programmeurs te weren van het platform. Als men alleen het minor getal checkt, en dus niet verder denkt dan zijn/haar neus lang is, denk ik dat er nog wel meer mis zal zijn met de software.
Er zijn enorme hoeveelheden programmeurs nodig en als je hard gaat selecteren op niveau, kom je er gewoon niet.
Als je code van enkele jaren terugziet ken ik ook weinig mensen die zeggen dat ze vandaag alles exact hetzelfde zouden maken. Je leert op korte tijd veel nieuwe zaken aan en je probeert altijd de traagste zaken te optimaliseren door nieuwe code aan te leren.
Een groeiproces is nu eenmaal noodzakelijk om goeie devs te krijgen. Op school wordt je ook niet altijd alles aangeleerd en om de enkele jaren passen scholen hun lessen aan om hedendaags te blijven.
Helemaal mee eens, had ooit vroeger is paar programma's, die niet wilden installeren, omdat ik zogenaamd een bepaalde versie niet had, ik had dus een nieuwere versie, maar die kende de check niet :/
Kiriaty noemt een aantal mogelijkheden om de implementatie van versiecontroles te verbeteren, al ziet hij ze het liefst geheel verdwijnen.
Helemaal niet meer checken? Sommige dingen zijn zo compleet anders opgelost in Vista (geluid bv) en dat is niet zomaar even op API beschikbaarheid te controleren.

Sommige visuele dingen zijn ook compleet anders zodat dingen pixels verplaatst moeten worden en dat weet je echt alleen maar als je weet in welk OS je zit.

Om nog maar te zwijgen van noodzakelijke workarounds/bugs in sommige windows versies waarvan je alleen maar weet dat je die moet omzeilen als je weet in welk OS je zit, bv een bug met schaduw van hints in XP tov win2000 destijds, maar nog steeds actueel.
Als Microsoft niet wilt dat wij het versienummer controleren moeten zij het voor ons doen. Ze kunnen simpelweg het opvragen van het Windows versienummer onmogelijk maken en in plaats daarvan een versie check API leveren. Dus ik vertel die API wat ik wil doen en de API vertelt mij of het OS dat support.... Moet ik natuurlijk eerst wel even checken of die API aanwezig is..... ;)
Vaak zijn niet de programmeurs hieraan debet, maar de marketing afdeling.

Ik heb ook een volstrekt overbodige versiecheck in een aantal producten moeten inbouwen. Product zou prima werken op 2000 en sommigen zelfs op 95, maar dat mocht niet van marketing. Dus zit er nu een check in op "minstens XP" en weigert hij te installeren op 2000.

Men was bang voor telefoontjes van gebruikers ofzo.

Blijkbaar is een melding "vette pech koop een ander OS" niet zo erg voor consumenten.
Nee, want het product is dan al verkocht en de centjes zijn binnen.
Net alsof dat zo evil is...als je een pakket waar minimaal XP opstaat koopt moet je niet verbaasd zijn dat het niet op 95 werkt (ook al kan dat in dŪt geval dus blijkbaar wel).

Op dit item kan niet meer gereageerd worden.



Apple iOS 10 Google Pixel Apple iPhone 7 Sony PlayStation VR AMD Radeon RX 480 4GB Battlefield 1 Google Android Nougat Watch Dogs 2

© 1998 - 2016 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True