[C#] Access Automation sluiten van window afvangen

Pagina: 1
Acties:

  • stfn345
  • Registratie: Januari 2000
  • Laatst online: 00:04
Ok hier komt ie :)

Ik heb een stukje code in c# gemaakt, dat een access DB opent, en een rapport toont. Nu lanceert hij een instantie van MSACCESS.EXE en laat deze draaien.
Wanneer je op het kruisje (sluiten) klikt in de zojuist gelanceerde app,
dan sluit de grafische gedeelte, maar MSACCESS.EXE blijft draaien.

Ik kan de applicatie wel afsluiten door bijvoorbeeld een oAccess.quit() te doen,
maar ik weet niet op welk moment.
Ik wil eigenlijk graag dat access gewoon afgesloten kan worden, en dat het dan ook uit de tasklist verdwijnt, maar op dit moment blijft MSACCESS.EXE dus gewoon draaien als de gui van msaccess al lang weg is.

code:
1
2
3
4
5
6
7
8
9
10
private void button1_Click(object sender, System.EventArgs e)
{   
    Access.Application oAccess = new Access.ApplicationClass();
    oAccess.OpenCurrentDatabase( "c:\\adp.mdb", true);
    oAccess.DoCmd.OpenReport(   "tobeparsed",
    Access.AcView.acViewPreview,System.Reflection.Missing.Value,"");
    oAccess.DoCmd.Maximize();
    oAccess.Visible= true;
    oAccess.
}


Kortom: Hoe kan ik afvangen dat iemand access probeert te sluiten?
of:
Hoe krijg ik het voor elkaar dat msaccess.exe niet blijft draaien wanneer de gui gesloten wordt?

Google/GoT search bieden geen uitkomst, maar vooral omdat ik niet goed weet waarop ik moet zoeken, heb al verschillende dingen geprobeerd, maar zonder succes.

*hoop op bruikbaar antwoord* _/-\o_

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Je zult die oAccess ws moeten disposen

https://fgheysels.github.io/


  • stfn345
  • Registratie: Januari 2000
  • Laatst online: 00:04
Hoe dan? oAccess.Dispose() is geen bestaande methode.

Verwijderd

Kill process?

  • Magic798
  • Registratie: Juni 2002
  • Laatst online: 18-05 14:50
Weet je zeker dat het process echt blijft bestaan? Probeer anders eens GC.Collect() aan te roepen.

  • stfn345
  • Registratie: Januari 2000
  • Laatst online: 00:04
Sorry dat ik niet eerder heb gereageerd, de processen blijven bestaan:

In taskmanager staat tig keer MSACCESS.EXE zelfs als ik elke keer de applicatie heb gesloten via Alt+F4/Kruisje/Afsluiten

Ik ga nu GC.Collect() proberen

GC.Collect() doet zijn werk, maar die kan ik eigenlijk niet @ random aanroepen.

Wat ik nu heb:

Als ik op een button klik, opent hij een rapport in MSACCESS.EXE

Sluit een user MSACCESS.EXE, dan blijf het proces bestaan.
--- Wanneer dit gebeurd zou ik dat graag willen weten, maar kan dat? ---
--- Dan kan ik bijv GC.Collect() aanroepen ---

Wat ik nu doe: wanneer men nogmaals op de button klikt wordt de GC.Collect() aangesproken, maar zo blijft er dus altijd een instantie van MSACCESS.EXE actief

Ook wanneer het programma (de launcher zeg maar) onverwachts stopt dan wordt GC.Collect niet meer aangeroepen en blijft msaccess.exe draaien

[ Voor 59% gewijzigd door stfn345 op 26-02-2004 09:49 ]


Verwijderd

Wat je kun doen is het process ophalen en dan .Kill() uitvoeren. Dit zou het process afsluiten.

  • stfn345
  • Registratie: Januari 2000
  • Laatst online: 00:04
Verwijderd schreef op 26 februari 2004 @ 09:44:
Wat je kun doen is het process ophalen en dan .Kill() uitvoeren. Dit zou het process afsluiten.
Dat kan ik doen, maar WANNEER moet ik dit doen? Stel een gebruiker opent een rapport en laat het lekker open staan. Ik wil die kill niet eerder aanroepen dan wanneer de gebruiker Access heeft gesloten.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Kan je dan niet met een try {} finally {} block werken?
De code in finally wordt altijd uitgevoerd, ook als er een exceptie optreedt in het bovenstaande try block
code:
1
2
3
4
5
6
7
8
try
{
   // doe hier je spul met dat access obj
}
finally
{
   GC.Collect();
}

https://fgheysels.github.io/

Pagina: 1