Hej mmm... Det var också en fråga ! Hej Sven Åke Du skulle kunna använda API för att uppdaterade miljövariabel: Men ! Den enklaste lösningen är som du säger Sven, att lägga filen i en katalog som redan ligger med i Path -miljövariablen. T.Ex. %SystemRoot%/System32 Om det vore så enkelt För att ändra Pathen permanent måste man ändra registervärdena. Är det ett program som du skall distrubera ? >Men det vore intressant att lära sig hur man gör för att pathsträngen i miljövariblerna skall uppdateras Jag hänger upp mig på ordet "Miljövariabel" kan någon vänlig själ förklara Hej igenVilken registerpost används när jag vill utöka Path strängen i registret
Skall via kod lägga till en sökväg till miljövariabeln PATH i registret
Hittar samma path sträng både i
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\Session
och i
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet\Control\Session
under nyckeln Path
Vilken post skall jag skriva till om jag vill lägga till sökvägen definitivt ?Sv: Vilken registerpost används när jag vill utöka Path strängen i registret
I vilken sorts applikation använder du denna teknik för att hitta Path ?
Pratar Vi VB applikationer ?
Normalt lägger jag mina sökvägar i HKEY_Current User osv VBA och VBSv:Vilken registerpost används när jag vill utöka Path strängen i registret
Jag kör en applikation i VB6
Jag måste anropa en dll fil som kräver att sökvägen till den finns i
Windows miljövariabel.
Har snokat runt lite i registret och inte funnit något annat sätt att lägga
till detta men är givetvis öppen för alla förslag
Sv: Vilken registerpost används när jag vill utöka Path strängen i registret
Private Declare Function GetEnvironmentVariable Lib "kernel32" Alias "GetEnvironmentVariableA" (ByVal lpName As String, ByVal lpBuffer As String, ByVal nSize As Long) As Long
Private Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As Long
Public Sub AddPath(Path As String)
Dim nSize As Long
Dim nResult As Long
Dim lpBuffer As String
Do
nSize = nSize + 1024
lpBuffer = String$(nSize, 0)
nResult = GetEnvironmentVariable("path", lpBuffer, nSize)
Loop While nResult > nSize
If InStr(1, lpBuffer, Path, vbTextCompare) = 0 Then
lpBuffer = Left(lpBuffer, nResult) & ";" & Path
SetEnvironmentVariable "path", lpBuffer
End If
End Sub
Jag tror inte denna ändring sparas i registret. Utan är bara tillfällig.
Sv:Vilken registerpost används när jag vill utöka Path strängen i registret
Om du ser till att den avsedda DLL:en ligger i Windows/System32
så hittar programmet själv sin Path.
Är det inte så Andreas ?. Eller är jag ute och cyklar ?Sv: Vilken registerpost används när jag vill utöka Path strängen i registret
Varför tänkte inte jag på det?
Får väl erkänna att jag är svag för för Win32 API.
Sedan så blir det ju en enklare installation om samtliga filer ligger i en och samma katalog. Sv:Vilken registerpost används när jag vill utöka Path strängen i registret
Filen måste enligt leverantören ligga i en specifik katalog ihop med ett antal övriga exe filer
Med Andreas tips löstes problemet, men det blir som han sa inte permanent utan man får anropa
den funktioner när programmet startas, men det är inga problem. Tackar
Men det vore intressant att lära sig hur man gör för att pathsträngen i miljövariblerna skall uppdateras
för gott. Det sker ju med många program man köper.
Har som sagt snokat lite i registret och fann att de registerposter som jag beskrev från början i min
fråga påverkas om man ändrar pathet via windows. Sv: Vilken registerpost används när jag vill utöka Path strängen i registret
http://www.codenewsgroups.net/group/microsoft.public.vb.general.discussion/topic2755.aspxSv:Vilken registerpost används när jag vill utöka Path strängen i registret
Om inte kan du väl gå in hårdhänt i RegisterEditor och editera rätt värde där.
Själv höll jag på och rotade där för många år sedan och använde API enl nedan.
För att sätta dig på spår.Sök på något av nedan.
http://www.planet-source-code.com/
<code>
Option Explicit
Private Declare Function RegOpenKeyEx Lib _
"advapi32" Alias "RegOpenKeyExA" _
(ByVal hKey As Long, ByVal lpSubKey As String, _
ByVal ulOptions As Long, ByVal samDesired As Long, _
ByRef phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib _
"advapi32" Alias "RegQueryValueExA" _
(ByVal hKey As Long, ByVal lpValueName As String, _
ByVal lpReserved As Long, ByRef lpType As Long, _
ByVal lpData As String, ByRef lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib _
"advapi32" (ByVal hKey As Long) As Long
Const HKEY_LOCAL_MACHINE = &H80000002
</code>
<b> Kör detta exempel rakt upp och ner.Byt ut valda delar så det passar din app.
Gör ett experimentprojekt av detta och testa dig fram.</b>
<code>
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const REG_OPTION_BACKUP_RESTORE = 4 ' open for backup or restore
Const REG_OPTION_VOLATILE = 1 ' Key is not preserved when system is rebooted
Const REG_OPTION_NON_VOLATILE = 0 ' Key is preserved when system is rebooted
Const STANDARD_RIGHTS_ALL = &H1F0000
Const SYNCHRONIZE = &H100000
Const READ_CONTROL = &H20000
Const STANDARD_RIGHTS_READ = (READ_CONTROL)
Const STANDARD_RIGHTS_WRITE = (READ_CONTROL)
Const KEY_CREATE_LINK = &H20
Const KEY_CREATE_SUB_KEY = &H4
Const KEY_ENUMERATE_SUB_KEYS = &H8
Const KEY_NOTIFY = &H10
Const KEY_QUERY_VALUE = &H1
Const KEY_SET_VALUE = &H2
Const KEY_READ = ((STANDARD_RIGHTS_READ Or KEY_QUERY_VALUE Or KEY_ENUMERATE_SUB_KEYS _
Or KEY_NOTIFY) And (Not SYNCHRONIZE))
Const KEY_WRITE = ((STANDARD_RIGHTS_WRITE Or KEY_SET_VALUE Or KEY_CREATE_SUB_KEY) _
And (Not SYNCHRONIZE))
Const KEY_EXECUTE = (KEY_READ)
Const KEY_ALL_ACCESS = ((STANDARD_RIGHTS_ALL Or KEY_QUERY_VALUE Or KEY_SET_VALUE _
Or KEY_CREATE_SUB_KEY Or KEY_ENUMERATE_SUB_KEYS Or KEY_NOTIFY Or KEY_CREATE_LINK) _
And (Not SYNCHRONIZE))
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" _
(ByVal hKey As Long, ByVal lpSubKey As String) As Long
Private Declare Function RegCreateKeyEx Lib "advapi32.dll" Alias "RegCreateKeyExA" _
(ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, _
ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, _
lpSecurityAttributes As Any, phkResult As Long, lpdwDisposition As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" _
(ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, _
ByVal samDesired As Long, phkResult As Long) As Long
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim Result As Long
'Check if the specified key exists
RegOpenKeyEx HKEY_CURRENT_USER, "KPD-Team", 0, KEY_ALL_ACCESS, Result
'If the key doesn't exist, we create it
If Result = 0 Then
'Create a new key
RegCreateKeyEx HKEY_CURRENT_USER, "KPD-Team", 0, "REG_DWORD", _
REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, ByVal 0&, Result, Ret
If Result = 0 Then
MsgBox "Error while creating the Key!!"
Exit Sub
End If
End If
'Delete the key
RegDeleteKey Result, ""
'close the handle
RegCloseKey Result
End Sub
</code>Sv: Vilken registerpost används när jag vill utöka Path strängen i registret
>för gott. Det sker ju med många program man köper.
Man ändrar PATH strängen bland miljövariablerna, inte i registret.
I vbscript gör man nåt i stil med
Dim wsh : Set wsh = CreateObject("Wscript.Shell")
Dim env : Set env = wsh.Environment("SYSTEM") ' eller "USER"
Dim path : path = env("PATH")
path = path & ";" & pathtoadd
env("PATH") = pathSv:Vilken registerpost används när jag vill utöka Path strängen i registret
vad som menas och ge ett litet exempel.
Jag har en vag uppfattning men skulle vilja få den uppfattningen bekräftad.
Gärna Ert exempel ang PathSv: Vilken registerpost används när jag vill utöka Path strängen i registret
Som jag nämnde tidigare så har jag löst det med Andreas förslag vilket fungerar
Miljövariabeler är det samma som Enviroment och sätts normalt i windows
datorhantering. Har tidigare testat ditt exempel och det är riktigt att registervärdet ändras
men efter att ha läst lite på webben så är det tydligen en fördröjning innan det blir aktivt ???
Än en gång tack
Borde stänga ärendet men det är ändå intressant att veta hur en riktig programmering av detta sker