[.NET, delphi]programma werkt niet op andere computer

Pagina: 1
Acties:
  • 337 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 27-04 11:59
Een programma wat ik heb geschreven werkt goed op mijn computer, maar op de computer waar het uiteindelijk moet gaan lopen krijg ik een error terug, waar ik niet veel mee kan:

Application has generated an exception that could not be handled

De ontwikkel computer(1) is een amd systeem met win xp prof erop. Het systeem waar het uiteindelijk moet gaan draaien(2)werkt met een intel processor en windows xp home. Ik weet niet zeker in hoeverre cpu-optimalisaties hier een rol in spelen, dus ik heb het programma ook zonder optimalisaties gecompileerd. Het probleem blijft gelijk.

Omdat het alleen op die pc verkeerd gaat (en nav wat ik via google heb gelezen) weet ik vrijwel zeker dat het aan het .NET framwork zelf ligt of de implementatie. Ik zou zo echter niet weten wat ik nog kan doen:

Ik heb intussen op pc2 het .NET framework geherinstalleerd (1.1) (meerdere keren zelfs). Probleem blijft :|
Nav een aantal google pagina's de beveiliging zo 'open' mogelijk gezet. (bij de .NET framework instellingen). Ik kon vanaf dit moment het programma dat op pc2 staat vanuit pc1 uitvoeren. Een tweetal topics kwamen hier op GoT ook naar voren:
[rml][ .NET] Error bij open van app op andere PC *[/rml]
[rml][ VB.NET] Error bij starten vanaf netwerkschijf[/rml]
waarvan vooral de eerste met een aantal goede punten komt.

Ik heb er uiteindelijk een debugger op gezet (na wat aanprutsen heb ik de .net framework sdk overgekopieert naar pc2 en daar cordbg.exe gedraait. Datzelfde heb ik ook gedaan op pc1 (reference) wat resulteerde in twee logs, die ik uit layoutoverwegingen hier (pc2) en hier (pc1) heb gehost.
Ik heb het idee dat de sdk er al vanuit gaat dat je delphi geinstalleerd heeft en daarvan de code erbij wil zoeken oid -- dus dat 'borland.delphi' zou niet noodzakelijk moeten zijn. Ik vond overigens onder %windir%\assembly wel onder andere een borland.delphi assembly, maar deze was (met gelijke versienummers) op beide systemen beschikbaar.

Mijn inspiratie raakt hier wel mee op. Misschien is hier iemand (misschien van het vorige topic) die hier een oplossing voor heeft kunnen vinden?

edit:
Ben er nu de hele nacht mee doorgegaan dus het kan even duren voor ik reageer (:O) moet om 5 uur ook weer helpdesken..

[ Voor 4% gewijzigd door SilentStorm op 06-04-2004 10:43 ]

Localhost is where the heart is


Acties:
  • 0 Henk 'm!

  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 12-03 10:39

pjvandesande

GC.Collect(head);

Ik ben het probleem zelf nog een aantal keer tegen gekomen. Ik (cristal, nu questa) heb nooit meer een beteren oplossing kunnen vinden dan windows update, ik heb die machines gewoon elke windows update laten binnen halen en installeren. Uit eindelijk werkte het, maar zou niet weten om welke update het precies gaat.

Het meest vreemde vind ik zodra je Visual Studio .NET installeerd het in eens wel werkt. Die installeerd dus iets wat de oplossing is. Maar wat zou ik niet weten.

Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:15

BCC

Jullie vergeten gewoon een aantal gereferencte klasses lokaal mee te kopieëren. Als je dit niet expliciet aangeeft en je draait het bijvoorbeeld op een oudere framework of een PC waar niet visual studio is geïnstalleerd dan krijg je exact dat wat jullie beschrijven. Als je dit wel doet draaien dingen voor de nieuwste framework zelfs perfect op de oude. Wat reference je allemaal?

[ Voor 3% gewijzigd door BCC op 06-04-2004 10:55 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:56
Hoe heb je die applicatie op die andere pc gedeployed? Heb je het via een setup-project gedaan?
Zonee, maak dan eens een setup project voor je applicatie, en deploy het op die manier. Zo zullen alle nodige assemblies mee-gedeployed worden.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:15

BCC

whoami schreef op 06 april 2004 @ 10:54:
Hoe heb je die applicatie op die andere pc gedeployed? Heb je het via een setup-project gedaan?
Dat doet exact hetzelfde als de oplossing die ik aandroeg, maar dan automagisch :)

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 27-04 11:59
heb intussen al vrijwel alles binnen vanaf windowsupdate. Het het misschien even moeten vermelden. Ben nu voor de zekerheid nog even updates als 'windows may stop unexpectedly when introductionary video clip is played' :+ aan het binnenhalen. Ik gebruik hier delphi. Ik wil die optie eigenlijk nog bewaren tot het allerlaatst. Degene die er gebruik van gaat maken kan er niets mee en ik weet niet zeker hoe het met licenties ed zit.
BCC schreef op 06 april 2004 @ 10:52:
Jullie vergeten gewoon een aantal geinclude klasses lokaal mee te kopieëren. Als je dit niet expliciet aangeeft en je draait het bijvoorbeeld op een oudere framework of een PC waar niet visual studio is geïnstalleerd dan krijg je exact dat wat jullie beschrijven. Als je dit wel doet draaien dingen voor de nieuwste framework zelfs perfect op de oude. Wat include je allemaal?
Het programma bestaat momenteel uit twee units. Mijn uses clause in de hoofdform bevat:
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Borland.Vcl.ComCtrls, Borland.Vcl.ExtCtrls,
System.ComponentModel, Borland.Vcl.StdCtrls, Borland.Vcl.Menus,
Borland.Vcl.DBCtrls, Borland.Vcl.Db, Borland.Vcl.Grids,
Borland.Vcl.DBGrids; en natuurlijk een link (uses) naar de tweede unit

Met de tweede unit:
Borland.Vcl.IBQuery, Borland.Vcl.Db, Borland.Vcl.IBCustomDataSet, Borland.Vcl.IBTable, Borland.Vcl.IBDatabase

In .Net zie ik daar het volgende van terug (onder assemblies gebruikt door programma):
• mscorlib
• Borland.Delphi
• Borland.VclRtl
• Borland.Vcl
• Borland.VclDbCtrls
• Borland.VclDbRtl
• Borland.VdlIBXpress
• System
• System.Xml

Ik heb verder geen geconfigureerde assemblies. Bovenstaande zijn allemaal 'standaardcontrols'. Wat zou ik moeten declareren? Ik las in de faq al dat dll's idd nog moet worden geregistreerd, maar dit is momenteel alles.

[edit]
Ik heb geen setup bestand voor deployen gemaakt. De faq van borland over deployen vertelde me dat als mijn project uit een enkele .exe bestond, dit bestand kon worden gekopieerd en het zou werken. Tenminste, dat begreep ik ervan. Als het met een setup wel moet gaan werken, kom ik er zo wel uit dacht ik. * pakt faq *

uit de faq:
Simple Applications

Assuming that the target computer already has the .NET Framework installed on it, deploying a simple application that consists of a single executable is as easy as copying the .exe file to the target computer. You don't need to register the application and deleting the application files effectively uninstalls it.
[/edit]

[ Voor 19% gewijzigd door SilentStorm op 06-04-2004 11:15 ]

Localhost is where the heart is


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:56
Maak een setup project, en alle nodige assemblies zullen automatisch gedeployed worden op de PC.
Dit is ook de mooiste oplossing, je hoeft gewoon de setup van je programma dan te draaien, en 't is gebakken.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • BCC
  • Registratie: Juli 2000
  • Laatst online: 22:15

BCC

Als je in de solution explorer het references mapje opent, kun je bij de properties van elk object zien of ze meegekopieerd worden (copy local). Zet dit eens allemaal op true en compile het. Werkt het nu wel? Of doe wat wohami zegt :)

[ Voor 6% gewijzigd door BCC op 06-04-2004 11:34 ]

Na betaling van een licentievergoeding van €1.000 verkrijgen bedrijven het recht om deze post te gebruiken voor het trainen van artificiële intelligentiesystemen.


Acties:
  • 0 Henk 'm!

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 27-04 11:59
Heb nu een beetje moeilijk zitten doen met het hoe en wat van de door jullie genoemde mogelijkheden. De setup mogelijkheid moet apart van cd worden geinstalleerd. ik heb hier een goed uitgewerkte guide over het opzetten van zo'n setup gevonden. (iets voor faq?)

De solution explorer is een programma dat zoals het er uit ziet alleen op Visual studio.NET van toepassing is. Ik heb het hiervoor niet echt duidelijk gezegt misschien; ik maak hier gebruik van "borland delphi 8 for the microsoft .NET framework". De solution explorer is hierbij niet inbegrepen :) Ik zal het dus gaan doen met de oplossing van whoami. Uiteraard blijf ik posten.

Localhost is where the heart is


Acties:
  • 0 Henk 'm!

  • Domokoen
  • Registratie: Januari 2003
  • Laatst online: 24-04 20:42
Bij Delphi moet je 1 DLL meekopieren... iets van Borland.Delphi.Runtime.DLL, iets van 86 KB ofzo. Heb je die ook op de andere PC?

Acties:
  • 0 Henk 'm!

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 27-04 11:59
Mr.Chinchilla schreef op 06 april 2004 @ 13:45:
Bij Delphi moet je 1 DLL meekopieren... iets van Borland.Delphi.Runtime.DLL, iets van 86 KB ofzo. Heb je die ook op de andere PC?
Ik heb met wat zoeken nu Borland.Delphi.dll (90 kb) gelocaliseerd in C:\Program Files\Common Files\Borland Shared\BDS\Shared Assemblies\2.0. Ga ik meteen proberen. Intussen ook mn delphi cd spul gevonden, dus als dit niet wil ga ik voor de installer.

edit:
that's a negative

[ Voor 6% gewijzigd door SilentStorm op 06-04-2004 14:47 ]

Localhost is where the heart is


Acties:
  • 0 Henk 'm!

  • SilentStorm
  • Registratie: November 2000
  • Laatst online: 27-04 11:59
[Oplossing] en [ergernis over hoe er te komen] ;)

Alleereerst nog even iets waar ik niet uitkwam: Het .NET framework levert een programmatje 'gacutil' mee, waarmee je assemblies aan het programma zou moeten kunnen toevoegen.
Het probleem wat ik hiermee heb is dat ik bij elke .dll die ik wil toevoegen, bv Borland.Delphi.dll, ik de melding krijg: "An attempt was made to load a program with an incorrect format.". Het commando dat ik hiervoor gebruik is
code:
1
2
"C:\Program Files\Microsoft.NET\SDK\v1.1\Bin\gacutil.exe" /il assemble.txt
 /r FILEPATH ..\output\eyepatch.exe "Eyepatch" > log.txt

Als ik hetzelfde met /i (en de directe locatie van de dll) ipv /il doe, krijg ik precies dezelfde melding. Als iemand hier nog enig idee over heeft hoor ik het graag. :)

Het uiteindelijke registreren gebeurt via de .NET framework configuratie onder administrative tasks in het configuratiescherm. De negative die ik hierboven gaf was omdat ik gebruik maakte van regsvr32.exe ipv .NET.

De quote die ik in mijn tweede post aanhaalde over een 'simpele appicatie' gaat alleen op voor console applicaties. Ik dacht zelf dat het subjectieve begrip 'simpel' sloeg op externe resources en non-vcl componenten. 'Uiteraard' moet de info over de vcl componenten ergens vandaan komen en ik dacht in al mijn onschuld dat het .NET framework dat volledig verzorgde. Iig: het is gelukt :) hoe zoiets simpels je 3 dagen van je werk kan houden :/ (geen volledige dagen, maar desalnietemin niet erg nuttig :P) bedankt voor alle reacties.

Een deploying faq/tutorial/howto/guide/etc zou ook nog best welkom zijn om alles even na te lopen. Ik heb zelf via google totaal niets relevants kunnen vinden. Als iemand hier nog een dergelijk document kan vinden houdt ik me aanbevolen :)

[ Voor 6% gewijzigd door SilentStorm op 08-04-2004 09:17 ]

Localhost is where the heart is


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:56
SilentStorm schreef op 08 april 2004 @ 09:16:
[Oplossing] en [ergernis over hoe er te komen] ;)

Alleereerst nog even iets waar ik niet uitkwam: Het .NET framework levert een programmatje 'gacutil' mee, waarmee je assemblies aan het programma zou moeten kunnen toevoegen.
Met gacutil kan je assemblies in de Global Assembly Cache installeren (en verwijderen). Dit moet je dus enkel doen als je een 'shared assembly' hebt.
Dit is een assembly die door meerdere applicaties gebruikt wordt.
(Het kan natuurlijk zijn dat je gebouwde applicatie gebruikt maakt van een shared assembly (bv. de magic usercontrol library), en die moet je dan natuurlijk ook installeren in de GAC op de pc waar je je app op installeert.

Een assembly die je in de GAC installeert, moet een unieke sleutel hebben. ('AssemblyKey'). Die sleutel kan je genereren door het tooltje sn.exe. Daarmee kan je een file genereren die die sleutel bevat, en die file kan je 'includen' in je manifest, of in je AssemblyInfo file.

Voor private assemblies heb je die GAC dus niet nodig.

(Daarnaast kan je een assembly ook in de GAC installeren door 'm gewoon te drag/droppen in %WINDIR%\assembly.


Het maken van een setup project is meestal de makkelijkste manier om je app te deployen.
Als je echter enkel gebruik maakt van private assemblies, dan is xcopy deployment meestal voldoende.

https://fgheysels.github.io/

Pagina: 1