Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C# ja mikä menee pieleen?

Anne [08.11.2012 22:45:13]

#

Meillä on ohjelmisto, josta on nyt tehty uusi versio, ja se toimii ok, paitsi...
Ohjelmiston alussa on version tarkastus: tietokannasta haetaan sallittu versio ja verrataan ohjelman settingeissä olevaan versioon. Kun sovelmaa kutsutaan komentoriviltä, se toimii ok, mutta kun ohjelmaa kutsutaan ns. kertakirjautumisjärjestelmästä, niin tarkastus menee pieleen. Tarkistus saadaan luulemaan, että se on ok, kun vaihdetaan virheellinen sallittu versio oikein sallitun tilalle.

Ohjelma siis toimii erilailla komentoriviltä kuin toisesta ohjelmasta kutsuttuna.
Versionumero voi olla esim. 1.5.0.0, 1.5.0.1 tai 1.5.0.1.1 (vm. tapauksessa 4 ensimmäistä numeroa on merkitseviä).

Nyt meillä on menossa versio 1.5.0.1, mutta am. tarkistus silti hyväksyy vain sallitun version 1.5.0.0.

string tSallittu = Parametri.GetValue(this._connection.GetCacheConnection()).ToString();
string tSovellus = Properties.Settings.Default.versio;
string[] tX = tSovellus.Split('.');
if (tX.Length > 4) {
    tSovellus = tX[0] + "." + tX[1] + "." + tX[2] + "." + tX[3];
}
if (!tSovellus.Equals(tSallittu)) {
     MessageBox.Show("Versio, jota yritit käynnistää, ei ole sallittu. Ota yhteys pääkäyttäjään! Sovellus suljetaan.");
    this.Exit();
}

Mistä tämä voi johtua. Emme pääse debuggaamaan tätä Visual Studiolla, koska ongelma esiintyy vain asiakkaalla ja kertakirjautumisjärjestelmästä kutsuttaessa.

Toistaiseksi olen osannut veikata vain sellaista, että toinen ohjelma, josta ohjelmaa kutsutaan, asettaa epäsopivan lokaalin ja merkit eivät olisikaan niitä miltä näyttävät. Onko siinä ideaa? Miten saisi selville, mikä lokaali tuossa toisessa ohjelmassa on? Onko teoriassa mahdollisuus debugata valmista softapakettia Visual Studiolla - Process Exploreista katsottuna sellaisen sai käyntiin, mutta sormi meni suuhun. Asiakkaalla ei tuota työkalua ainakaan ole.

On toki vielä mahdollista, että väärä lokaali - vai joku muu? - sotkisi haetun arvon rajapinnassa.

Rajapinta metodi luokassa Parametri on määritelty seuraavasti:
public static string GetValue(XXX.CacheConnection pConn, string pOrg, string pName, string pValid) { }

joten kutsuttaessa ToString on turha, mutta mikä olisi tilanne, jolloin muunnettaessa string-tyyppinen ToStringillä koko string sekoaisi?

Jotain muita ideoita?

groovyb [08.11.2012 23:11:58]

#

Mikä päivittää sovelluksen version?

Jos sovellus on versiossa 1.5.0.0, ja tietokanta versio 1.5.0.1, tuohan toimii oikein. Pitääkin valittaa joa kanta on päivitetty mutta sovellus ei.

Anne [09.11.2012 08:12:53]

#

EI, kyse ei ollut siitä. Komentoriviltä ajettuna toimii ok, mutta toisesta ohjelmasta kutsuttuna ihan sama exe toimii väärin. Toisesta ohjelmasta kutsuttuna ohjelman mielestä 1.5.0.1 ei ole sama kuin 1.5.0.1, mutta jos muuttaa sallittua versioparametria, niin ohjelma tulkitsee 1.5.0.1 = 1.5.0.0.
Kaikki on stringejä, mutta mikä voi saada merkit muuttumaan/numerot pyöristymään/pisteet häviämään tms.?

Grez [09.11.2012 08:36:19]

#

Ehdotan, että muutat viimeiset rivit muotoon

if (tSallittu != tSovellus)
{
    MessageBox.Show(String.Format(
        "Versio, jota yritit käynnistää, ei ole sallittu. Ota yhteys pääkäyttäjään! ({0}!={1}) Sovellus suljetaan.",
        tSallittu, tSovellus));
}

Eiköhän tuo muutos toisi valoa pimeään.

Lisäksi, unkarilainen notaatio C# ohjelmassa, wtf?

Anne [09.11.2012 11:45:02]

#

Tämä on unkarilainen - no, tämä oli siistitty versio: alkuperäinen on tuplaunkarilainen, mutta kun se toimii kuitenkin toista kautta ok, niin se ei ole suoraa se. Siis sama koodi, mutta eri kutsutapa.

groovyb [09.11.2012 17:32:44]

#

Oletko kokeillut attachata prosessiin remote debuggerin kautta?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta