Solved

How to get my Console.exe to run as hidden?

Posted on 2010-09-14
8
534 Views
Last Modified: 2013-11-05
I have a very basic console app that is ment to collect users inventory in their "My Documents" & "My Desktop".
I would like to console app to run in a hidden state.
I did varous searches on the network, but I am not having any luck.

If you need to code I will post it if requested.
 
0
Comment
Question by:yo_bee
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
8 Comments
 
LVL 33

Expert Comment

by:Todd Gerbert
ID: 33675611
You probably want your application to be a Windows Forms program, just don't show any forms.
0
 
LVL 17

Expert Comment

by:Zhaolai
ID: 33675680
Like the first comment said, do it in a Win Forms app without any forms. Just Add a module and place all the code in sub Main.
0
 
LVL 17

Expert Comment

by:Tony Massa
ID: 33675712
Set objShell = CreateObject("Wscript.Shell")
strCommand = "console.exe /param"
objShell.Run strCommand, 0, True


Using the '0' here hides the window.  "True" makes the script wait until the command is completed before resuming the script
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 33

Accepted Solution

by:
Todd Gerbert earned 500 total points
ID: 33675719
Right-click on your project and go to Properties, turn off the "Enable Application Framework", set "Startup Object" to Sub Main().  Add a module to your project with a sub main() and this will be your starting point...
Here's a simple example that uses a custom application context to continuously loop in a  background thread.

Imports System.Threading
Module Module1
    Sub Main()
        Application.Run(New MyAppContext())
    End Sub
End Module
Public Class MyAppContext
    Inherits ApplicationContext
    Private worker As Thread
    Private exitWorkerSignal As ManualResetEvent
    Public Sub New()
        worker = New Thread(AddressOf WorkerProc)
        worker.IsBackground = True

        exitWorkerSignal = New ManualResetEvent(True)

        worker.Start()
    End Sub
    Private Sub WorkerProc()
        'Loop continuously, until the exitWorkerSignal is reset, then exit
        While (exitWorkerSignal.WaitOne(0))
            'Inventory my documents
            GetMyDocsInventory()

            'Sleep for a bit
            Thread.Sleep(500)
        End While
    End Sub
    Private Sub GetMyDocsInventory()
        'Dummy sub - do work here
    End Sub
    Protected Overrides Sub ExitThreadCore()
        exitWorkerSignal.Reset()
        MyBase.ExitThreadCore()
    End Sub
End Class

Open in new window

0
 
LVL 23

Author Comment

by:yo_bee
ID: 33676103
Attached is my code modified to resemble the code above.
I am getting two errors.

Error      1      Name 'Application' is not declared.      C:\Users\boscam\AppData\Local\Temporary Projects\FileInventory\Module1.vb      8      9      FileInventory
Error      2      Type 'ApplicationContext' is not defined.      C:\Users\boscam\AppData\Local\Temporary Projects\FileInventory\Module1.vb      12      14      FileInventory

Note sure what this is?


Imports System
Imports System.IO
Imports System.Threading

Module Module1
    Sub Main()
        Application.Run(New MyAppContext())
    End Sub
End Module
Public Class MyAppContext
    Inherits ApplicationContext
    Private worker As Thread
    Private exitWorkerSignal As ManualResetEvent
    Public Sub New()
        worker = New Thread(AddressOf WorkerProc)
        worker.IsBackground = True

        exitWorkerSignal = New ManualResetEvent(True)

        worker.Start()
    End Sub
    Private Sub WorkerProc()
        'Loop continuously, until the exitWorkerSignal is reset, then exit
        While (exitWorkerSignal.WaitOne(0))
            'Inventory my documents
            GetMyDocsInventory()

            'Sleep for a bit
            Thread.Sleep(500)
        End While
    End Sub
    'Private Sub GetMyDocsInventory()
    'Dummy sub - do work here
    '********************************************************************************************* 
    Private Sub GetMyDocsInventory()
        Dim Computername As String = Environment.MachineName
        Dim StrFiles(0 To 1) As String
        StrFiles(0) = (My.Computer.FileSystem.SpecialDirectories.MyDocuments)
        StrFiles(1) = (My.Computer.FileSystem.SpecialDirectories.Desktop)

        Dim d As Double



        Using sw As StreamWriter = New StreamWriter(StrFiles(0) & "\" & Computername & ".txt", append:=False) ', False, System.Text.Encoding.Unicode)

            sw.WriteLine("Computer Name" & vbTab & "Directory Name" & vbTab & "File Name" & vbTab & "File Size" & vbTab & "File Extension")


            'Root Directory Starts here
            For Each StrDir In StrFiles
                'sw.WriteLine(vbtab & StrDir)

                FolderSearch(StrDir, sw, Computername, d)
            Next
            sw.Close()
            If File.Exists("\\flhappc\sys\networkinventory\" & "\" & Computername & ".txt") Then
                File.Delete("\\flhappc\sys\networkinventory\" & "\" & Computername & ".txt")
            End If
            File.Move(StrFiles(0) & "\" & Computername & ".txt", "\\flhappc\sys\networkinventory\" & "\" & Computername & ".txt")
        End Using


    End Sub

    Private Sub FolderSearch(ByVal startingDir As String, ByVal sw As StreamWriter, ByVal computername As String, ByVal d As Double)
        'This maybe used later if I am able to figure how to pass the expression 
        'to the getdirectories
        '
        'Dim RegexObj1 As New Regex("[0-9]")
        '******************************************
        Dim StartDI As New DirectoryInfo(startingDir)
        Dim SubFI As FileInfo() = StartDI.GetFiles()
        Dim SubDI As DirectoryInfo() = StartDI.GetDirectories()
        'Dim filesize As Double

        ' do files first
        'MsgBox(fsize)
        'Application.DoEvents()
        'If (StartDI.Attributes) <> 48 Then

        For Each SubFItemp In SubFI

            Try
                'fsize = ((((SubFItemp.Length) / 1024) / 1024) / 1024))

                sw.WriteLine(computername & vbTab & SubFItemp.DirectoryName & vbTab & SubFItemp.Name & vbTab & SubFItemp.Length & vbTab & SubFItemp.Extension)

            Catch ex As Exception
                sw.WriteLine(ex.Message)
            End Try
        Next

        'End If

        ' do the subdirectories, and then descend into the directory structure


        For Each SubDITemp In SubDI
            'If (SubDITemp.Attributes) <> 48 Then
            'sw.WriteLine()
            d = d + 1
            ' a recursive call to this routine
            FolderSearch(SubDITemp.FullName, sw, computername, d)
            'End If

        Next

    End Sub

    Protected Sub ExitThreadCore()
        exitWorkerSignal.Reset()
        MyBase.ExitThreadCore()
    End Sub
End Class

Open in new window

0
 
LVL 33

Expert Comment

by:Todd Gerbert
ID: 33676135
You need a reference to the System.Windows.Forms library, and add an Imports System.Windows.Forms.
You also need to make sure the "Application type" is set to "Windows Forms Application", "Enable application framework" is off, and "Startup object" is "Sub Main"
0
 
LVL 23

Author Comment

by:yo_bee
ID: 33676138
also here is a Properties screenshot
Capture.JPG
0
 
LVL 23

Author Closing Comment

by:yo_bee
ID: 33676171
Thanks for all the help

This worked like a charm
0

Featured Post

Enroll in July's Course of the Month

July's Course of the Month is now available! Enroll to learn HTML5 and prepare for certification. It's free for Premium Members, Team Accounts, and Qualified Experts.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
In this video, viewers are given an introduction to using the Windows 10 Snipping Tool, how to quickly locate it when it's needed and also how make it always available with a single click of a mouse button, by pinning it to the Desktop Task Bar. Int…
In this video you will find out how to export Office 365 mailboxes using the built in eDiscovery tool. Bear in mind that although this method might be useful in some cases, using PST files as Office 365 backup is troublesome in a long run (more on t…

623 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question