استخدام InstallUtil وتعيين اسم المستخدم/كلمة المرور لتسجيل الدخول إلى خدمة Windows بصمت
-
02-07-2019 - |
سؤال
أحتاج إلى استخدام InstallUtil لتثبيت خدمة Windows C#.أحتاج إلى تعيين بيانات اعتماد تسجيل دخول الخدمة (اسم المستخدم وكلمة المرور).كل هذا يجب أن يتم بصمت.
هل هناك طريقة للقيام بشيء مثل هذا:
installutil.exe myservice.exe /customarg1=username /customarg2=password
المحلول 2
برافو لزميلي في العمل (بروس إيدي).لقد وجد طريقة يمكننا من خلالها إجراء مكالمة سطر الأوامر هذه:
installutil.exe /user=uname /password=pw myservice.exe
يتم ذلك عن طريق تجاوز OnBeforeInstall في فئة المثبت:
namespace Test
{
[RunInstaller(true)]
public class TestInstaller : Installer
{
private ServiceInstaller serviceInstaller;
private ServiceProcessInstaller serviceProcessInstaller;
public OregonDatabaseWinServiceInstaller()
{
serviceInstaller = new ServiceInstaller();
serviceInstaller.StartType = System.ServiceProcess.ServiceStartMode.Automatic;
serviceInstaller.ServiceName = "Test";
serviceInstaller.DisplayName = "Test Service";
serviceInstaller.Description = "Test";
serviceInstaller.StartType = ServiceStartMode.Automatic;
Installers.Add(serviceInstaller);
serviceProcessInstaller = new ServiceProcessInstaller();
serviceProcessInstaller.Account = ServiceAccount.User;
Installers.Add(serviceProcessInstaller);
}
public string GetContextParameter(string key)
{
string sValue = "";
try
{
sValue = this.Context.Parameters[key].ToString();
}
catch
{
sValue = "";
}
return sValue;
}
// Override the 'OnBeforeInstall' method.
protected override void OnBeforeInstall(IDictionary savedState)
{
base.OnBeforeInstall(savedState);
string username = GetContextParameter("user").Trim();
string password = GetContextParameter("password").Trim();
if (username != "")
serviceProcessInstaller.Username = username;
if (password != "")
serviceProcessInstaller.Password = password;
}
}
}
نصائح أخرى
الطريقة الأسهل بكثير من المنشورات أعلاه وبدون أي كود إضافي في برنامج التثبيت الخاص بك هي استخدام ما يلي:
installUtil.exe /اسم المستخدم=المجال\اسم المستخدم /كلمة المرور=كلمة المرور /C:\My.exe غير المراقب
فقط تأكد من أن الحساب الذي تستخدمه صالح.إذا لم يكن الأمر كذلك، فسوف تتلقى استثناء "لم يتم إجراء أي تعيين بين أسماء الحسابات ومعرفات الأمان".
InstallUtil.exe
يحدد StartupType=Manual
في حالة رغبتك في تشغيل الخدمة تلقائيًا، استخدم:
sc config MyServiceName start= auto
(لاحظ أنه يجب أن يكون هناك مسافة بعد '=')
لا، installutil لا يدعم ذلك.
بالطبع إذا كتبت مثبتًا؛مع عمل مخصص فستكون قادرًا على استخدام ذلك كجزء من MSI أو عبر installutil.
يمكنك أيضًا فرض تشغيل الخدمة كمستخدمServiceProcessInstaller::Account = ServiceAccount.User;
ستظهر نافذة منبثقة تطلب "[المجال\]المستخدم، كلمة المرور" أثناء تثبيت الخدمة.
public class MyServiceInstaller : Installer
{
/// Public Constructor for WindowsServiceInstaller
public MyServiceInstaller()
{
ServiceProcessInstaller serviceProcessInstaller = new ServiceProcessInstaller();
ServiceInstaller serviceInstaller = new ServiceInstaller();
//# Service Account Information
serviceProcessInstaller.Account = ServiceAccount.User; // and not LocalSystem;
....