2009-05-29 1 views
3

Nachdem ich mein .NET Programm installiert habe, wie setze ich den System PATH so, dass er mein absolutes Programmverzeichnis enthält, so dass der Benutzer meine .exe von einem beliebigen Verzeichnis in der Konsole aus starten kann?Wie füge ich mein Programm zu PATH in Windows .NET hinzu?

Hinweis: Ich möchte, dass dies automatisch geschieht, ohne dass der Endbenutzer den PATH manuell hinzufügen muss.

+1

Welches Installationspaket verwenden Sie? Es kann eine Möglichkeit bieten, dies zu tun. –

Antwort

4

Ich gehe davon aus Sie die VS2008 verwenden eingebauten Installer und nicht Installshield oder Wise oder so etwas (das beide viel bessere Möglichkeiten haben).

Sie können eine Installer-Klasse erstellen, die sie hinzufügt (siehe unten).

Sie dann Ihre Installateur Klasse als custom action for install and uninstall hinzufügen und fügen Sie custom actions data mit dem Pfad, den Sie mögen, zum Beispiel des TARGETDIR zu dem Pfad hinzufügen ...

/Variablenname = „Pfad“ /Value = "[TARGETDIR] \"

using System; 
using System.ComponentModel; 

namespace Emv 
{ 
    [RunInstaller(true)] 
    public class Installer : System.Configuration.Install.Installer 
    { 
     public Installer() 
     { 

     } 

     public override void Install(System.Collections.IDictionary stateSaver) 
     { 
      base.Install(stateSaver); 

      try 
      { 
       var varName = this.Context.Parameters["VariableName"]; 
       var valToAdd = this.Context.Parameters["Value"]; 
       var newVal = String.Empty; 

       var curVal = Environment.GetEnvironmentVariable(varName); 

       if (curVal != null && curVal.Contains(valToAdd)) 
       { 
        return; 
       } 

       newVal = (curVal == String.Empty) ? valToAdd 
                 : curVal + ";" + valToAdd; 

       Environment.SetEnvironmentVariable(varName, newVal, 
         EnvironmentVariableTarget.Machine); 
      } 
      catch (Exception ex) 
      { 
       // message box to show error 
       this.Rollback(stateSaver); 
      } 
     } 
    } 
} 

Ein Verweis auf System.Configuration.Install wird für diesen Code erforderlich.

+0

Sie sind genau richtig..ich bin Verwenden des integrierten Installers vs2008. vielleicht sollte ich einfach InstallShield verwenden. danke für den code though..ich wusste nicht, dass ich mein eigenes kundenspezifisches Installationsprogramm erstellen könnte. – sivabudh

2

Die meisten Installationsprogramme ermöglichen das Anhängen an die Systempfad-Umgebungsvariable. Überprüfen Sie die Dokumentation für diese Funktion.

Wenn Sie manuell installieren, können Sie setx.exe (aus dem Resource Kit IIRC) verwenden, um den Pfad zu ändern - aber seien Sie vorsichtig, Sie wollen den vorhandenen Pfad nicht nur durch das Verzeichnis Ihrer App ersetzen mit Erfahrung :)

Oder mein Favorit, verwenden WMI in einem Skript:

zB.

strComputer = "." 
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2") 

Set objVariable = objWMIService.Get("Win32_Environment").SpawnInstance_ 

objVariable.Name = "Path" 
objVariable.UserName = "System" 
objVariable.VariableValue = "c:\myapp" 
objVariable.Put_ 
+0

Ich habe es gerade in C# ausprobiert .. aber habe keinen Unterschied gesehen ... habe ich etwas verpasst? ManagementClass clss = neue ManagementClass ("Win32_Environment"); clss ["UserName"] = "System"; clss ["Name"] = "Pfad"; clss ["Variablenwert"] = "c: \\ myapp"; clss.Put(); – sivabudh

+0

Ich habe keine Ahnung, ich mache nur meine WMI-Skripte in .vbs-Skripten, die ich mit cscript.exe – gbjbaanb

3

Sie können an dieser Stelle in der Registrierung auf den aktuellen Pfad zugreifen und hängen: besser

HLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path 

Dies ist eine Änderung in Ihrem Installateur, nicht in Ihrer aktuellen Anwendung gemacht.

Stellen Sie sicher, auf den Registrierungswert anhängen , und nicht nur gesetzt es ...

+0

ausführen Wenn Sie den PATH des Benutzers wollen, ist es in 'HKEY_CURRENT_USER \ Environment \ PATH' – Pat

Verwandte Themen