Advertisement

01.21.2008 at 05:36AM PST, ID: 23098081
[x]
Attachment Details
[x]
The Solution Rating System

With so many solutions, how can you tell which solutions are most likely to help you and which ones are not? To provide you with a tool to use, we rate our solutions based on various elements that most accurately determine if a solution is a quality solution. To explain what factors affect the solution rating, here are the elements we take into consideration when formulating our solution rating.

  • The Grade of the Solution
  • The Zone Rank of the Expert Providing the Solution
  • The Number of Author and Expert Comments
  • The Number of Experts Contributing
  • The Feedback of the Community

Your Input Matters
Because of the way the system is set up, the most important variable in this equation is you. As a member of Experts Exchange, you are able to cast your vote on the quality of the solutions in regard to how complete, accurate, helpful and easy to understand each solution is. When you provide your feedback, each rating is adjusted accordingly. So, if you see a solution that has a poor rating that you think is a good solution, let us know by rating it. As you do, the rating will be adjusted and will become more accurate for other members of our site.

If you have any suggestions that you would like to make for our rating system, please ask a question in the Suggestions Zone of Community Support.

Thank you!

Error: There has been a sharing violation, the source or destination file maybe in use.
Tags: sharing, cannot, violation, file, error
Hi,

I am developing amobile device app. with VS 2005 and c#.  At start up the app checks if there is an update for any of the files (via web service), if there is any they get downloaded and the actual application exe is started.

Now, whenever I do an update, everything seems ok.  Next time I try to do the same thing, I get an error.  It seems the files are locked.  I cannot delete/copy them manually or by code.  I believe it is my code locking it but I need more eyes to find which bit of code is doing it.  Below I post most of my code dealing with file download/update.

It starts with the code below.  The code uses the backgroundworker component from D Moth.

                    foreach (XmlNode node in files)
                    {
                        if (node != null)
                        {
                            count++;

                            // Get the file name of the current updated file.
                            file = node.InnerXml;
                            if (file.Length > 0)
                            {
                                Application.DoEvents();

                                // Download the file to our temp directory.
                                BackgroundWorker worker = new BackgroundWorker();
                                worker.DoWork += new DoWorkEventHandler(Utils.HttpDownload);
                                worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
                                BackgroundWorkerArgs args = new BackgroundWorkerArgs();
                                args.DownloadSource = url + file;
                                args.DownloadDestination = AppDir + UpdatesTempDir + file;
                                workers.Add(worker);
                                workers[workers.Count -1].RunWorkerAsync(args);
                            }
                        }
                    }

This above results a call made to HttpDownload in Utils class.  The mothods are below

        public static void HttpDownload(object sender, DoWorkEventArgs e)
        {
            BackgroundWorkerArgs args = (BackgroundWorkerArgs)e.Argument;
            HttpDownload(args.DownloadSource, args.DownloadDestination);
        }

        public static bool HttpDownload(string source, string destination)
            {
                  bool downloaded = false;
                  HttpWebRequest request = null;
                  HttpWebResponse response = null;
                  FileStream newFile = null;      
                  BinaryReader reader = null;
                  BinaryWriter writer = null;        

                  try
                  {
                lock (syncLock)
                {
                    // Create the destination file. If it exists then overwrite it.
                    newFile = new FileStream(destination, FileMode.Create, FileAccess.Write);

                    // Request the source.
                    request = (HttpWebRequest)HttpWebRequest.Create(source);
                    response = (HttpWebResponse)request.GetResponse();
                    // Read the response.
                    reader = new BinaryReader(response.GetResponseStream());
                    writer = new BinaryWriter(newFile);                         
                }
                  }
            catch (Exception ex)
                  {
                        // Failed trying to create the local file or opening the request.
                        downloaded = false;
                  }

                  try
                  {
                        while (true)
                        {                    
                              // Write bytes to the new file.
                              writer.Write(reader.ReadByte());
                        }
                  }
                  catch (System.IO.EndOfStreamException)
                  {
                        // We reached the end of the file.
                        downloaded = true;
                  }
                  catch(System.Exception ex)
                  {
                        // Download failed.
                        downloaded = false;
                  }
                  finally
                  {
                        // Always close the files.
                        if (writer != null)
                        {
                              writer.Flush();
                              writer.Close();
                        }

                if (newFile != null)
                    newFile.Close();
                  }

                  return downloaded;
            }


On completing each file download, a method on the GUI gets called and is shown below along with methods (those dealing with files) called within it.

        void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            try
            {
                currentFileNumber++;

                if (currentFileNumber == totalFileCount + 1)
                {
                    // Install the new updates.
                    this.pbProgress.Value = 100;
                    this.UpdateProgressLabel("Installing updated files...");
                    System.Threading.Thread.Sleep(150);

                    this.CopyDirectoryNonRecurse(AppDir + UpdatesTempDir, AppDir, false);
                    // Update the client config file with the new version number.
                    this.UpdateProgressLabel("Reconfiguring client components...");
                    System.Threading.Thread.Sleep(150);
                    UpdateConfig(AppDir + ClientConfigFile, newVersion);

                    this.UpdateProgressLabel("New version installed.");
                    System.Threading.Thread.Sleep(150);

                    // Clear the temp download directory and files.
                    this.UpdateProgressLabel("Deleting temporary files...");
                    System.Threading.Thread.Sleep(150);
                    this.ClearDirectory(AppDir + UpdatesTempDir);

                    currentFileNumber = 0;
                    totalFileCount = 0;

                    DoUpdate(true);
                }
                else
                {
                    this.pbProgress.Value = 90 / totalFileCount * (currentFileNumber - 1);
                    Application.DoEvents();
                    this.UpdateProgressLabel("Downloading file " + currentFileNumber.ToString() + " of " + totalFileCount + "...\n");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message, "Failed to auto-update", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
                StartApp();
            }
        }

        private void CopyDirectoryNonRecurse(string sourcePath, string destPath, bool deleteFirst)
        {
            // Put paths into DirectoryInfo object to validate.
            DirectoryInfo dirInfoSource = new DirectoryInfo(sourcePath);
            DirectoryInfo dirInfoDest = new DirectoryInfo(destPath);

            // Check if destination dir exists.
            if (Directory.Exists(dirInfoDest.FullName))
            {
                if (deleteFirst)
                {
                    Directory.Delete(dirInfoDest.FullName, true);
                    Directory.CreateDirectory(dirInfoDest.FullName);
                }
            }
            else
            {
                // Create the new directory.
                Directory.CreateDirectory(dirInfoDest.FullName);
            }

            // Copy all files in the directory.
            CopyDirFiles(dirInfoSource.FullName, dirInfoDest.FullName);
        }

        private void CopyDirFiles(string sourcePath, string destinationPath)
        {
            try
            {
                // Get dir info which may be file or dir info object.
                DirectoryInfo dirInfo = new DirectoryInfo(sourcePath);
                if (!destinationPath.EndsWith(@"\"))
                {
                    destinationPath = destinationPath + @"\";
                }

                foreach (FileSystemInfo fsi in dirInfo.GetFileSystemInfos())
                {
                    if (fsi is FileInfo)
                    {
                        // If file object just copy. Overwrites files!    
                        File.Copy(fsi.FullName, destinationPath + fsi.Name, true);
                    }
                    else
                    {
                        // Ignore sub directories.
                    }
                }
            }
            catch (Exception ex)
            {                
                throw;
            }
        }

        private void ClearDirectory(string dir)
        {
            try
            {
                // Check if the directory exists.
                if (Directory.Exists(dir))
                {
                    Directory.Delete(dir, true);
                }

                // Create the directory.
                Directory.CreateDirectory(dir);
            }
            catch (Exception)
            {
                throw;
            }
        }
 
What I am looking for is help to find the code that is leaving files locked.  I cannot tell if my application's process is still running.  VS remote tools are not working for me.  It cannot connect to device! don't know why!

Thanks
H




Start your free trial to view this solution
Question Stats
Zone: Programming
Question Asked By: gbzhhu
Solution Provided By: PockyMaster
Participating Experts: 2
Solution Grade: B
Views: 74
Translate:
Loading Advertisement...
01.21.2008 at 05:44AM PST, ID: 20705938

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.21.2008 at 05:51AM PST, ID: 20705984

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.21.2008 at 08:40AM PST, ID: 20707329

Rank: Master

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.21.2008 at 08:48AM PST, ID: 20707393

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.21.2008 at 08:49AM PST, ID: 20707407

Rank: Master

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.21.2008 at 08:53AM PST, ID: 20707448

Rank: Master

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.21.2008 at 09:10AM PST, ID: 20707587

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.21.2008 at 09:16AM PST, ID: 20707638

Rank: Master

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.21.2008 at 09:25AM PST, ID: 20707732

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.21.2008 at 10:15AM PST, ID: 20708100

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.21.2008 at 02:13PM PST, ID: 20710195

Rank: Master

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.22.2008 at 01:52AM PST, ID: 20712944

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.22.2008 at 02:07AM PST, ID: 20712991

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.22.2008 at 05:48AM PST, ID: 20714093

Rank: Master

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
01.22.2008 at 06:03AM PST, ID: 20714201

All comments and solutions are available to Premium Service Members only.

Start your 7 day free trial and see for yourself why Experts Exchange is the easiest and most proven technology resource in the world. Get Started

Already a member? Login to view this solution.

 
 
Loading Advertisement...
Microsoft
  • Internet Protocols
  • Applications
  • Development
  • OS
  • Hardware
  • Windows Security
Apple
  • Operating Systems
  • Hardware
  • Programming
  • Networking
  • Software
Internet
  • Search Engines
  • File Sharing
  • WebTrends / Stats
  • Spy / Ad Blockers
  • Web Browsers
  • New Net Users
  • Web Development
  • Chat / IM
  • Anti Spam
  • Web Servers
  • Anti-Virus
  • Email Clients
Gamers
  • Tips
  • Online / MMORPG
  • Puzzle
  • Emulators
  • Action / Adventure
  • Role Playing
  • Consoles
  • Game Programming
  • Strategy
  • Sports
  • Misc
  • Computer Games
Digital Living
  • Hardware
  • New Net Users
  • New Users
  • Software
  • Digital Music
  • Gaming World
  • Home Security
  • Apple
  • Networking Hardware
Virus & Spyware
  • Vulnerabilities
  • IDS
  • Encryption
  • Anti-Virus
  • Operating Systems Security
  • Software Firewalls
  • WebApplications
  • Cell Phones
  • Operating Systems
  • Internet
  • Hardware Firewalls
Hardware
  • Handhelds / PDAs
  • Displays / Monitors
  • Components
  • Networking Hardware
  • Peripherals
  • Laptops/Notebooks
  • Storage
  • Servers
  • Desktops
  • New Users
  • Misc
  • Apple
Software
  • System Utilities
  • Industry Specific
  • Network Management
  • Photos / Graphics
  • Page Layout
  • VMWare
  • Misc
  • Web Development
  • OS
  • CYGWIN
  • Voice Recognition
  • Message Queue
  • Quality Assurance
  • Security
  • Firewalls
  • MultiMedia Applications
  • Development
  • Database
  • Office / Productivity
  • Business Management
  • OS/2 Apps
  • Server Software
  • Internet / Email
ITPro
  • OS
  • Storage
  • Encryption
  • Operating Systems Security
  • Apple Hardware
  • Laptops & Notebooks
  • Servers
  • Networking Hardware
  • Peripherals
  • Devices
  • Displays / Monitors
  • WebTrends / Stats
  • Search Engines
  • Firewalls
  • WebApplications
  • IDS
  • Vulnerabilities
  • Email Clients
  • File Sharing
  • Spy / Ad Blockers
  • Web Browsers
  • Web Servers
  • Networking
  • Anti-Virus
  • Chat / IM
  • Anti Spam
Developer
  • Web Servers
  • Web Browsers
  • Game Programming
  • Dev Tools
  • Industry Specific
  • Office / Productivity
  • Database
  • CYGWIN
  • Web Development
  • Search Engines
  • File Sharing
  • WebTrends / Stats
  • Programming
  • Content Management
  • Application Servers
  • Protocols
Storage
  • Removable Backup Media
  • Storage Technology
  • Servers
  • Grid
  • Remote Access
  • Backup / Restore
  • Misc
  • Hard Drives
OS
  • Miscellaneous
  • Security
  • Development
  • Linux
  • VMWare
  • MainFrame OS
  • Unix
  • Apple
  • OS / 2
  • AS / 400
  • BeOS
  • Microsoft
  • VMS / OpenVMS
Database
  • Oracle
  • Miscellaneous
  • MySQL
  • Software
  • Sybase
  • Contact Management
  • PostgreSQL
  • Data Manipulation
  • Clarion
  • InterSystems Cache
  • Siebel
  • MUMPS
  • OLAP
  • SQLBase
  • SAS
  • GIS & GPS
  • 4GL
  • Berkeley DB
  • DB2
  • Informix
  • Interbase / Firebird
  • FoxPro
  • Reporting
  • LDAP
  • Filemaker Pro
  • MS SQL Server
  • dBase
  • MS Access
Security
  • Misc
  • Web Browsers
  • Software Firewalls
  • Operating Systems Security
  • File Sharing
  • Spy / Ad Blockers
  • Vulnerabilities
  • WebApplications
  • IDS
  • Anti-Virus
  • Encryption
  • Anti Spam
  • Email Clients
  • VPN
  • Chat / IM
Programming
  • Editors IDEs
  • Installation
  • Handhelds / PDAs
  • Multimedia Programming
  • System / Kernel
  • Algorithms
  • Game
  • Signal Processing
  • Project Management
  • Open Source
  • Database
  • Misc
  • Languages
  • Processor Platforms
  • Theory
Web Development
  • Scripting
  • Blogs
  • Web Servers
  • Software
  • Search Engines
  • Web Graphics
  • Images
  • Internet Marketing
  • Images and Photos
  • Components
  • Document Imaging
  • Web Languages/Standards
  • Illustration
  • WebApplications
  • Fonts
  • WebTrends / Stats
  • Authoring
  • Digital Camera Software
  • Miscellaneous
Networking
  • Protocols
  • Apple Networking
  • Network Management
  • Message Queue
  • Application Servers
  • Content Management
  • File Servers
  • Email Servers
  • Misc
  • Java Editors & IDEs
  • Wireless
  • Networking Hardware
  • Backup / Restore
  • System Utilities
  • ISPs & Hosting
  • Web Servers
  • Storage Technology
  • Removable Backup Media
  • Servers
  • Broadband
  • Grid
  • OS / 2
  • Novell Netware
  • Unix Networking
  • Windows Networking
  • Security
  • Telecommunications
  • Operating Systems
  • Linux Networking
Other
  • Community Advisor
  • Lounge
  • Community Support
  • New Net Users
  • Philosophy / Religion
  • Math / Science
  • Miscellaneous
  • URLs
  • Expert Lounge
  • Politics
  • Puzzles / Riddles
Community Support
  • Suggestions
  • New to EE
  • New Topics
  • Community Advisor
  • CleanUp
  • Announcements
  • General
  • Feedback
  • Input
  • EE Bugs
 
01.21.2008 at 05:44AM PST, ID: 20705938
On which line u got the exception?
 
01.21.2008 at 05:51AM PST, ID: 20705984
On Copying the file...

File.Copy(fsi.FullName, destinationPath + fsi.Name, true);

I can't get the correct error message.  I am getting "An error message cannot be displayed because an optional resource assembly containing it cannot be found".  I figured out the correct error when I manually tried to delete file on the device.

The above line works first time (after a soft reset of the device)
 
01.21.2008 at 08:40AM PST, ID: 20707329

Rank: Master

If seems you are not closing your streams, please check your open streams and don't rely on the garbage collector to dispose them.
I can give you an example of a better practise, using the 'using' statement
 
01.21.2008 at 08:48AM PST, ID: 20707393
Thanks PockyMaster

The only place I am opening a stream is here

newFile = new FileStream(destination, FileMode.Create, FileAccess.Write);

And I am closing it in the finally block.  The finally block is guaranteed to run just as much as a using block is guaranteed to release the resource in the statement.  I will try a using statement anyway and see what happens, just to make sure I am not making incorrect assuptions

finally
{
      // Always close the files.
      if (writer != null)
      {
            writer.Flush();
            writer.Close();
      }

    if (newFile != null)
        newFile.Close();
}
 
01.21.2008 at 08:49AM PST, ID: 20707407

Rank: Master

e.g. the HttpDownload method could become:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
public static bool HttpDownload(string source, string destination)
        {
            bool downloaded = false;
            HttpWebRequest request = null;
            HttpWebResponse response = null;
            BinaryReader reader = null;
 
            try
            {
                lock (syncLock)
                {
                    // Create the destination file. If it exists then overwrite it.
                    using (FileStream newFile = new FileStream(destination, FileMode.Create, FileAccess.Write))
                    {
                        // Request the source.
                        request = (HttpWebRequest)HttpWebRequest.Create(source);
                        response = (HttpWebResponse)request.GetResponse();
                        // Read the response.
                        reader = new BinaryReader(response.GetResponseStream());
 
                        using (BinaryWriter writer = new BinaryWriter(newFile))
                        {
                            for (int i = 0; i < reader.BaseStream.Length; i++)
                            {
                                // Write bytes to the new file.
                                writer.Write(reader.ReadByte());
                            }
                            downloaded = true;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                // Failed trying to create the local file or opening the request.
                downloaded = false;
            }
 
            return downloaded;
        }
Open in New Window
Accepted Solution
 
01.21.2008 at 08:53AM PST, ID: 20707448

Rank: Master

The advantage of using the 'using' block, is that you will not forget closing the stream, so for that reason alone I prefer using that.
Other reason is, that you don't have to write code like you stated in your final block (e.g. if (writer != null) etc.

Plus the scope in which the resource is claimed is exactly as long as you need it.
 
01.21.2008 at 09:10AM PST, ID: 20707587
You are right in the reasons you gave for using a using block.  I just hope it also fixes my issue! that would be great :-)
 
01.21.2008 at 09:16AM PST, ID: 20707638

Rank: Master

I would hope so, because it looks like you are not closing the 'reader' object in your code.
 
01.21.2008 at 09:25AM PST, ID: 20707732
Now that I changed code (your original didn't work.  Exception thrown NotSupported on BaseStream.Length property) I modified my origianl code to use using blocks and now first time app runs fine, files get downloaded then I try again via VS and get error

Deployment and/or registration failed with error: 0x8973190e. Error writing file '%CSIDL_PROGRAM_FILES%\MyCentaurMobile\CentaurObjects.dll'. Error 0x80070020: The process cannot access the file because it is being used by another process.
        Device Connectivity Component      

I get this error on 2 files and these are the two files I downloaded!! to update the app!  This is what my code looks like now.

        public static bool HttpDownload(string source, string destination)
            {
                  bool downloaded = false;
                  HttpWebRequest request = null;
                  HttpWebResponse response = null;
                  //FileStream newFile = null;      
                  BinaryReader reader = null;
                  //BinaryWriter writer = null;        

                  try
                  {
                lock (syncLock)
                {
                    using (FileStream newFile = new FileStream(destination, FileMode.Create, FileAccess.Write))
                    {
                        // Request the source.
                        request = (HttpWebRequest)HttpWebRequest.Create(source);
                        response = (HttpWebResponse)request.GetResponse();
                        // Read the response.
                        reader = new BinaryReader(response.GetResponseStream());
                        using (BinaryWriter writer = new BinaryWriter(newFile))
                        {
                            while (true)
                            {
                                // Write bytes to the new file.
                                writer.Write(reader.ReadByte());
                            }

                            // We reached the end of the file.
                            downloaded = true;
                        }
                    }
                }
                  }
                  catch(System.Exception ex)
                  {
                        // Download failed.
                        downloaded = false;
                  }
            //finally
            //{
            //    // Always close the files.
            //    if (writer != null)
            //    {
            //        writer.Flush();
            //        writer.Close();
            //    }

            //    if (newFile != null)
            //        newFile.Close();
            //}

                  return downloaded;
            }
 
01.21.2008 at 10:15AM PST, ID: 20708100
I can get rid of that VS error temporarily by soft reset device but I also downloaded a tool that lists all processes running on the device and you can kill any of them.  Now I found out that the updater part of my app is probably OK because it completes fine and then fires the actual app.  I was killing the app by clicking the x sign on my first form.  Form disappears but application along with 7 threads it somehow acquired are still running!! this is my problem.  How do I ensure app terminates correctly on clicking x button of the main (first loaded) form?

H
 
01.21.2008 at 02:13PM PST, ID: 20710195

Rank: Master

7 threads, could that be the amount of files you are processing?
could they belong to the background worker component you are using?
 
01.22.2008 at 01:52AM PST, ID: 20712944
No.  The application is split into 2.  Application launcher which does the auto-update and downloads files as needed.  It then starts the second part the application executable.  It is the application executable that is not terminating correctly (it is left behind running hidden).  I will try again to see if the thread number is the same
 
01.22.2008 at 02:07AM PST, ID: 20712991
I just found out that I did something really stupid!  The firm form of the app had the MinimizeBox set to true so when i thought I was terminating the app I was minimizing it!!  Since the device has no task bar I couldnt see it.  Fix that and the app is not left running hidden, however the threads are still 6 when app is running.  I am wondering why?
 
01.22.2008 at 05:48AM PST, ID: 20714093

Rank: Master

But your problem with your file is resolved right?
Just to make sure, before your application is started, and you run your diagnostics, you have n threads,
after the update tool started: n + 7, update tool down and application running: n+6?
 
01.22.2008 at 06:03AM PST, ID: 20714201
Yep, my issue with the files is resolved and thus my question should be closed.

The diagnostics tool displays all running processes and # of threads for each process.  Before I run my application, there is just a big list of processes displayed.  On running the launcher, it appears and shows 7 threads in use then it closes.  App starts and shows 6 threads in use.

I don't think I need to worry about these threads as I cannot see any performance issues.  I was wondering why that number of threads is needed by my app.
 
 
01.22.2008 at 06:23AM PST, ID: 20714368
Yeah, would just take it as it is. You might have a look what it does if you start your app without the loader
 
 
01.22.2008 at 06:26AM PST, ID: 20714399
I already looked by running the app without the loader.  It still says 6 threads in use!  The tool maybe misleading.  Its own process shows up as using 102 threads!!
 
 
01.22.2008 at 06:38AM PST, ID: 20714546
Ok, well, that takes away worry about the loader at least :D
 
 
01.22.2008 at 06:40AM PST, ID: 20714570
Yeah, it does :-).  Thanks for your help PockyMaster, much appreciated.
 
 
 
20080236-EE-VQP-29 / EE_QW_2_20070628