우리는 제품을 위해 Wix에서 설치 프로그램을 빌드하려고합니다. 이 제품의 일부로 elasticsearch를 서비스로 설치하고이를 서비스로 실행해야합니다. 이 서비스는 별도의 사용자 계정으로 실행해야합니다.C#에서 새로운 사용자를위한 환경 변수를 생성합니다
사용자 계정을 설정하는 첫 번째 단계가 성공적으로 완료되었습니다. 그러나 elasticsearch를 올바르게 실행하려면 특정 환경 변수를 설정해야합니다. 부주의 한 사용자 실수의 가능성을 줄이기 위해 우리는 기계적 범위가 아닌 elasticsearch 사용자로 이러한 변수를 설정해야합니다.
이 목적을 위해서 지정된 사용자로만 변수를 만드는 방법이 필요합니다. 그러나 우리는 Wix 또는 C# 확장을 사용하여이 작업을 수행 할 수있는 방법을 아직 찾지 못했습니다.
우리가 가장 가까이 온 것은 C#에서 ManagementObject
을 쿼리하고 ELASTICUSER
에 대한 SID를 검색하는 것입니다. 이론적으로 레지스트리에 다른 환경 변수를 쓰려면 그림과 같이 "HKEY_USERS\<SID>\Environment"
이어야합니다.
var query = new SelectQuery("Win32_UserAccount");
var manObjSearch = new ManagementObjectSearcher(query);
var stringToWrite = string.Empty;
foreach (var envVar in manObjSearch.Get())
{
if (envVar["Name"].ToString().ToUpperInvariant() == "ELASTICUSER")
{
elasticUserSid = envVar["SID"].ToString();
}
}
using (var key = Registry.Users.OpenSubKey(elasticUserSid + "\\Environment"))
{
if (key == null)
{
return;
}
key.SetValue("OurVariable", "Value");
}
그러나, SID가있는 사용자까지 레지스트리에서 첫 번째 로그를 생성하지 않은 것 같습니다.
를 따라서 환경 변수를 만들 윅스, 또는 C#으로 하나를 사용할 수있는 방법이 로그인하지 않은 새로 생성 된 사용자의 경우?
감사합니다. 그래서 LoadUserProfile을 호출 한 후에 이러한 레지스트리 키를 추가 할 수 있습니까? 나는 그 대답이 '예'라고 생각한다. WiX가 동일한 명령을 제공하는지 알고 있습니까? –
하이브가로드되고 나면, 이미 이론적으로는 이미 가지고있는 코드가 작동해야합니다. WiX가가는 한 당신을 도울 수 없습니다. –
Thanks @HarryJohnston 먼저 LogonUser 및 DuplicateToken을 사용해야했지만 작동했지만 레지스트리에 SID를 만들었습니다. 당신의 도움을 주셔서 감사합니다 –