Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 581
  • Last Modified:

Building a software install agent in C#

Hello,
I am building a software install agent which will be broken down into the following sequence...

1. Agent receives software request

The agent (which is a WCF service [WPF front-end]) receives a request which specifies the package ID, package name, source files location and silent install script (this part has already been taken care of).

2. Request is added to download queue

The request is added to a queue where each application that becomes first in line is downloaded from the source files location into a cached location on the local machine

3. Downloaded completes

Once the download is complete, the download is removed from the queue and the agent running in the system-tray presents a balloon asking if the user wants to begin the install (this is in case the user is about to shut-down their machine in which case the install will fail). If the user does not wish to install the software at that moment, the install is pending on the agent.

4. Check existing installs

Scan processes to make sure msiexec is not running. If it is running, the install becomes pending on the agent.

5. Initiate install

Install begins using the silent install script. Other installs may try to launch whilst one is running however it will be made pending on the agent as Step 4 outlines.

6. Install completes

Once msiexec is no longer detected as running, package is removed from installs pending and the cache is deletedMy question is, how would I cache the status of these pending downloads/installs which the agent would read from? Obviously if a user logs off or shuts down their machine, a record of the downloads to be resumed upon next startup needs to be restored as well as the pending installs.

The only way I can think of doing it is to write download requests (Step1/2) to an xml file.. after the download is complete (Step 3), remove the download request from the xml file.. add the pending install (Step 3) to another xml file containing all installs.. after the install is complete (Step 6), remove the install from the xml file.

This seems like a pretty clunky way of doing it though.. anyone got a better idea?
0
AdamBock
Asked:
AdamBock
  • 2
1 Solution
 
John ClaesSenior .Net Consultant & Technical AnalistCommented:
why don't you keep it all in the same Xml ?
I would propose 1 xml Document

This document can be loaded in the startup of your Agent.

The document is kept in memory in the Agent and changed only in memory

This document is saved upon Disk at Stop or End of the agent
0
 
AdamBockAuthor Commented:
The document is kept in memory in the Agent and changed only in memory
This document is saved upon Disk at Stop or End of the agent

problem with that is if a system logoff/shutdown isn't executed properly (eg. power failure), the xml will not be saved.

Is there a more efficient way of doing it rather than reading/writing from an xml? whre do programs like uTorrent pull info from in order to load up the previously loaded torrents?
0
 
Todd GerbertIT ConsultantCommented:
I would create classes to represent download packages and installations; keep a collection or two to represent pending/queued installs/downloads, XML serialization would make reading/writing that information to an XML file trivial.  You'll just need to write to the XML file on disk each time the collection changes.
0
 
AdamBockAuthor Commented:
a
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now