Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Öppna program mha Process.Start()

Postades av 2006-06-13 15:03:15 - Stefan Skoog, i forum c# (c-sharp), Tråden har 11 Kommentarer och lästs av 782 personer

Hej,

Har en liten applikation som lagrar olika typer av dokument i en databas. Då användaren ska titta på ett dokument skapar jag en ny tråd som hämtar upp dokumentet det från databasen och sparar ner det temporärt på hårddisken. Sen anropas Process.Start() för att öppna filen med det program den är associerad med. Därefter körs Process.WaitForExit() för att avvakta tills dokumentet stängs. Slutligen sparar tråden ner dokumentet i databasen igen.

Funkar bra så länge man inte öppnar 2 dokument som är associerade med samma applikation. Problemet uppstår då jag öppnar 2 filer (t.ex. 2 word-dokument). Det som händer är att Process.WaitForExit() inte returnerar en ny process för det andra dokumentet, utan funktionen återanvänder den befintliga word-processen för att öppna det andra dokumentet. Detta medför att Process.WaitForExit() inte stannar utan programmet exekverar vidare.

Ngn som har ngn lösning på detta. Nedan är koden för den tråd som skapas varje gång användaren vill öppna ett nytt dokument:

delegate void OpenDocument(int iDokumentID);
private void OpenDocumentHandler(int iDokumentID)
{
// …
// Hämta dokument från database och spara ner på disk
//…

Process oProcess;

// öppna det med associerat program
oProcess = new System.Diagnostics.Process();
oProcess.StartInfo.FileName = "\"" + sDocumentPath + iDokumentID + "." + oDokumentProfil.Filtyp_str + "\"";

oProcess.Start();

// vänta på att användaren ska stänga dokumenet
oProcess.WaitForExit();

//..
// Skriv tillbaka till filen och spara ner i databsen
//..
}


Svara

Sv: Öppna program mha Process.Start()

Postades av 2006-06-22 08:56:46 - Johan Lindfors

Du skulle kunna prova att bryta ut koden som ska spara tillbaka filen i databasen genom att prenumerera på händelsen att applikationen är avslutad, tex:

<code>
...
{
Process proc = new Process();
...
proc.EnableRaisingEvents = true;
proc.Exited += new EventHandler(proc_Exited);

proc.Start();
}

static void proc_Exited(object sender, EventArgs e)
{
// Spara dokumentet här
}
</code>


Svara

Sv:Öppna program mha Process.Start()

Postades av 2006-06-22 09:46:57 - Stefan Skoog

Hej Johan,

Jag testade ditt förslag men tyvärr så uppstår samma problem som tidigare. Om man har en wordprocess igång sedan tidigare så återanvänds denna process och Process.Start(); returnerar false. Detta betyder att en ny process inte skapats och då kan av naturliga skäl inte händelsen "oProcess.Exited += new EventHandler(OnExit);" kopplas på ngn process (eftersom det inte skapats ngn). Lite luddigt beskrivet kanske men jag hoppas att det går att förstå. Skulle vara bra om det gick att hitta ngn lösning som gör att en ny process startas varje gång oavsett om det redan finns en igång.


Svara

Sv: Öppna program mha Process.Start()

Postades av 2006-06-22 11:43:52 - Johan Lindfors

Hmm, jag har laborerat vidare med detta och jag undrar om jag inte lyckats att lösa detta genom att ange en parameter till WinWord.exe.

<code>
Process proc = new Process();
proc.StartInfo = new ProcessStartInfo("winword.exe");
proc.StartInfo.Arguments = "/w";
</code>

Utmaningen är dock att den flaggan öppnar word med ett tomt dokument, men det finns fler flaggor för dig att pröva på på följande sida: http://support.microsoft.com/kb/210565/

Hör av dig igen!


Svara

Sv:Öppna program mha Process.Start()

Postades av 2006-06-22 12:19:28 - Stefan Skoog

Tackar för infon, ska testa lite med det och återkommer. Ser dock ett litet problem med att använda parametrar och det är att man måste använda sig av olika parametrar för olika typer av program eftersom samma problem uppstår oavsett om det är Word-filer eller PDF-filer man öppnar.


Svara

Sv: Öppna program mha Process.Start()

Postades av 2006-06-22 12:30:56 - Johan Lindfors

Tyvärr är det nog så att det beror lite på hur de applikationer som du vill starta flera processer av är skrivna. Prova exempelvis med enkla "notepad.exe", där får jag inte det här problemet verkar det som.


Svara

Sv:Öppna program mha Process.Start()

Postades av 2006-06-22 12:44:43 - Stefan Skoog

ja det verkar stämma. Kan kanske bli lite knivigt att använda sig av denna metod. Håller på att testa ett annat spår där tanken är att programmet ska kontrollera om filen används mha ngt Windows API. Verkar som om informationen går att hämta från NtQuerySystemInformation (ntdll.dll). Dock har jag inte kommit på hur jag anroppar den dll:en än.


Svara

Sv: Öppna program mha Process.Start()

Postades av 2006-06-25 09:01:50 - Johan Lindfors

Hmm, har inte kollat vad den metoden gör, men det känns inte som om att du kommer kunna "lura" alla eventuella applikationer som är skrivna för att utnyttja samma session och jobba med "modala" dokument istället för nya sessioner, att förändra sitt uppträdande.

Hur många olika filtyper gäller det och kan du förändra beteendet i applikationen istället?

Om det nu är så att du vill att dina använda ska genom att trycka på en knapp bara automatiskt ladda hem en fil lokalt, uppdatera den med en annan applikation och sedan när den applikationen stängs automatiskt ladda upp förändringarna igen, så tror jag inte ens att det är löst i exempelvis SharePoint utan där har de funktionerna separerats. Ladda hem en fil - Uppdatera - Ladda upp en fil

Mvh


Svara

Sv:Öppna program mha Process.Start()

Postades av 2006-06-26 07:44:26 - Stefan Skoog

Ok... jag får undersöka detta närmare... återkommer då jag hittat ngt lösning (om det nu finns ngn) Tackar för hjälpen :D


Svara

Sv: Öppna program mha Process.Start()

Postades av 2006-06-26 10:32:17 - Andreas Hillqvist

Kan du inte ;vervaka filen, se om det finns n[gra ;ppna filhandtag till filen. N'r filhandtagen st'ngs kan du kontrollera om filen har 'ndrats och i s[ fall fr[ga anv'ndaren om de vill spara f;r'ndringarna.


Svara

Sv:Öppna program mha Process.Start()

Postades av 2006-06-27 10:37:49 - Stefan Skoog

Har du ngn kod för hur man kollar om det finns filhandtag till en fil? Fungerar detta även för t.ex. notepad som enbart verkar öppna filen läsa av innehållet och sen stänga den igen, eller håller även notepad ett filhandtag till filen hela tiden?


Svara

Sv: Öppna program mha Process.Start()

Postades av 2006-06-27 11:17:29 - Niklas Jansson

Notepad håller det nog inte. Och även om notepad skulle göra det så gör inte min applikation arnepad det.

Glöm, glöm, glöm. Minns ni inte tidigare diskussion?

Du kan aldrig få en generell 100%-ig lösning på det sättet. Du har följande val:

1. Du kan kontinuerligt kontrollera filer. Osäker på om det går att göra utan pollning, och då har du ändå inte 100%. Nästan dock. Detta kräver att ditt program kör en speciell övervakning, och kräver rimligtvis kod på ganska låg nivå. Det är inte omöjligt att du får lattja med lite filkontrollblock (gissar att det heter så även i Windows).
2. Du kan, om du har kontroll över alla inblandade applikationer, konstruera ett protokoll att arbeta mellan.
3. Om du har ett litet antal specifika applikationer med specifika versioner så har du eventuellt möjlighet att specialstyra beteendet för varje program.
4. Du kan försöka med en kombination. Det blir dock besvärligt, och framförallt benäget att ge konstiga val.

eller så låter du användarens filsystem och applikationer arbeta som de gör, och istället göra något av följande:
1. Skapa egna applikationer för att ändra filer (ingen höjdarlösning).
2. Låta bli alltihopa och istället låta användaren säga till när filen är klar och du laddar då upp den.
3. Låta bli alltihopa och låta filsystemet vara det du utgår ifrån. Allt sparas lokalt på en dator. När någon begär en fil så levererar du det från datorn i det skick det just då befinner sig i.
4. Skicka ut information till alla som har öppnat filen om att ändringar sker.

Det här är befintliga problem hos nuvarande distribuerade filsystem, anta hellre en policy (alt. 2, 3 eller 4 här) och stå sen för den.

Det är min definitiva övertygelse.


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 170
27 953
271 705
785
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies