Avatar billede dannv Nybegynder
17. november 2006 - 12:35 Der er 18 kommentarer og
1 løsning

sende parameter til kørende process

Hej

Jeg vil gerne sende en -reload parameter til min kørende bpftp server..

i cmd kan jeg gøre følgnde C:\Program Files\BPFTP Server>G6FTPSrv.exe -reload

Hvorefter ftp programmet reloader en users.ini fil.

Hvordan gøres dette kode mæssigt i c#... ??

Dann
Avatar billede hacked Nybegynder
17. november 2006 - 14:31 #1
Generelt gør du præcis det samme. Dit program har en Main som tager string argumenter med fra command line. Inden i dit program kan du tilgå det string array i metoden Main.

Lidt infomation.

http://www.csharp-station.com/Tutorials/Lesson01.aspx
http://msdn2.microsoft.com/en-us/library/96s74eb0.aspx
Avatar billede hacked Nybegynder
17. november 2006 - 14:34 #2
Inde*
Avatar billede hacked Nybegynder
17. november 2006 - 14:39 #3
Hov lidt for hurtig - kørende proces hmmmm.
Avatar billede hacked Nybegynder
17. november 2006 - 14:43 #4
Avatar billede hmortensen Nybegynder
17. november 2006 - 15:12 #5
Kan du mon ikke blot bruge
System.Diagnostics.Process.Start(@"C:\Program Files\BPFTP Server\G6FTPSrv.exe", "-reload");
Avatar billede davidfossil Nybegynder
17. november 2006 - 15:26 #6
Mit umiddelbare gæt er at det kan du ikke. Kan du gøre det fra din kommandoprompt?
Avatar billede hmortensen Nybegynder
17. november 2006 - 15:33 #7
Hvis du kan fyre ovenstående kommando af i kommandopromt, burde Process.Start() virke fint.
Avatar billede dannv Nybegynder
20. november 2006 - 09:19 #8
Hej har prøvet følgende:

System.Diagnostics.Process.Start(@"C:\Program Files\BPFTP Server\G6FTPSrv.exe", "-reload");

Men uden held, hvis jeg gør dette fra en komandoprompt virker det fint, og ftp serveren genindlæser users.ini filen som var meningen..
Avatar billede hmortensen Nybegynder
20. november 2006 - 10:18 #9
Får du en fejl, eller sker der ikke noget?
Avatar billede dannv Nybegynder
20. november 2006 - 10:20 #10
Der kommer ingen fejl, ligger i try catch, men der sker bare intet...!
Avatar billede dannv Nybegynder
21. november 2006 - 13:47 #11
OK jeg har nu arbejdet lidt med problemet og her er lidt som jeg ikke forstår..:

Jeg har lavet en app. (ny) som primært starter en ny process der kalder en bat fil.. i og den primære del af koden ser ud som følger:

try
{
System.Diagnostics.ProcessStartInfo psi = new System.Diagnostics.ProcessStartInfo (@"C:\ANC services\PeekserverDownloadService\newFTPUsers.bat");

psi.RedirectStandardOutput = false;
psi.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
psi.UseShellExecute = false;

System.Diagnostics.Process reloadUser;
reloadUser = System.Diagnostics.Process.Start(psi);
}
catch (Exception ex)
{
string extest = ex.ToString();
                                   
return false;
}

Ovenstående kan jeg eksekvere fra mit exe program, den kalder så en bat fil der reloader users.ini i min ftp server... så langt så godt..

Når jeg benytter ovenstående fra min windows service sker der imidlertid absolut intet...

nogen logisk forklaring på dette...???
Avatar billede hacked Nybegynder
21. november 2006 - 23:31 #12
Hos mig virker hmortensen's måde fint både som windows application og som console application.
Test version: bpftp server v2.3.1. trial.
Jeg kører c# programmerne fra samme maskine som hoster min bpftp maskine.

Process.Start(@"c:\program files\bpftp server\bpftpserver.exe", "-reload");

output:

11/21/2006 11:22:28 PM - Received "reload" command.
11/21/2006 11:27:38 PM - Received "reload" command.
11/21/2006 11:27:39 PM - Received "reload" command.
11/21/2006 11:27:39 PM - Received "reload" command.
11/21/2006 11:27:39 PM - Received "reload" command.
11/21/2006 11:27:40 PM - Received "reload" command.
11/21/2006 11:27:40 PM - Received "reload" command.
11/21/2006 11:27:40 PM - Received "reload" command.
11/21/2006 11:27:41 PM - Received "reload" command.
11/21/2006 11:27:41 PM - Received "reload" command.
11/21/2006 11:27:41 PM - Received "reload" command.
Avatar billede hacked Nybegynder
21. november 2006 - 23:37 #13
bpftp server* - bpftp maskine
Avatar billede dannv Nybegynder
22. november 2006 - 07:55 #14
Det var også det jeg prøvede at skrive, Det fungerer når jeg kører det som windows application MEN IKKE som Windows SERVICE...!!

Har du forsøgt som en service...??

Windows service ligger på samme maskine som min bpftp server...
Avatar billede hacked Nybegynder
22. november 2006 - 16:24 #15
Ah ok nu er jeg med.
Din service har sandsynligvis ikke tilladelse til at interagere med desktop. Service -> vælg din service -> properties -> vælg tab logon -> kryds "Allow service to interact with desktop" af. That should do the job ;)
Avatar billede dannv Nybegynder
22. november 2006 - 16:53 #16
OK prøver, men kan først i morgen...
Avatar billede hacked Nybegynder
22. november 2006 - 20:44 #17
Her er lidt kode der omhandler både service og installer. I den vil du kunne se hvordan man aktivere allow desktop..... i koden. Jeg har ikke vedlagt design klasser da de ikke indeholder noget relevant.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration.Install;
using System.ServiceProcess;
using System.Management;

namespace WindowsService1
{
    [RunInstaller(true)]
    public partial class Installer1 : Installer
    {
        private ServiceInstaller serviceInstaller;
        private ServiceProcessInstaller processInstaller;

        public Installer1()
        {
            processInstaller = new ServiceProcessInstaller();
            serviceInstaller = new ServiceInstaller();
            processInstaller.Account = ServiceAccount.LocalSystem;
            serviceInstaller.StartType = ServiceStartMode.Manual;
            serviceInstaller.ServiceName = "BPFTPReload";
            Installers.Add(serviceInstaller);
            Installers.Add(processInstaller);
        }

        public override void Install(System.Collections.IDictionary stateSaver)
        {
            base.Install(stateSaver);
            ConnectionOptions connectionOptions = new ConnectionOptions();
            connectionOptions.Impersonation = ImpersonationLevel.Impersonate;
            ManagementScope managementScope = new System.Management.ManagementScope(@"root\CIMV2", connectionOptions);
            managementScope.Connect();
            ServiceController serviceController = new ServiceController(this.serviceInstaller.ServiceName);
            ManagementObject managementObject = new ManagementObject("Win32_Service.Name='" + serviceController.ServiceName + "'");
            ManagementBaseObject InParam = managementObject.GetMethodParameters("Change");
            InParam["DesktopInteract"] = true;
            ManagementBaseObject OutParam = managementObject.InvokeMethod("Change", InParam, null);
        }
    }
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ServiceProcess;
using System.Diagnostics;
using System.Timers;

namespace WindowsService1
{
    partial class Service1 : ServiceBase
    {
        public Service1()
        {
            CanPauseAndContinue = true;
            this.ServiceName = "BPFTPReload";
        }

        protected override void OnStart(String[] args)
        {
            Process.Start(@"c:\program files\bpftp server\bpftpserver.exe", "-reload");
        }

        protected override void OnStop()
        {
        }

        protected override void OnPause()
        {
        }

        protected override void OnContinue()
        {
        }

        protected void OnTimer(System.Object source, ElapsedEventArgs e)
        {
        }
    }
}
Avatar billede hacked Nybegynder
22. november 2006 - 20:53 #18
rettelse:

public override void Install(System.Collections.IDictionary stateSaver)
        {
            base.Install(stateSaver);
            ConnectionOptions connectionOptions = new ConnectionOptions();
            connectionOptions.Impersonation = ImpersonationLevel.Impersonate;
            ManagementScope managementScope = new System.Management.ManagementScope(@"root\CIMV2", connectionOptions);
            managementScope.Connect();
            ManagementObject managementObject = new ManagementObject("Win32_Service.Name='" + this.serviceInstaller.ServiceName + "'");
            ManagementBaseObject InParam = managementObject.GetMethodParameters("Change");
            InParam["DesktopInteract"] = true;
            ManagementBaseObject OutParam = managementObject.InvokeMethod("Change", InParam, null);
        }
Avatar billede dannv Nybegynder
23. november 2006 - 08:31 #19
Det var lige det der skulle til... :-)

Mange tak for indsatsen...!!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester