当我启动应用程序(wpf)与特定用户创建数据库时,我试图模拟当前用户。
我正在尝试使用以下代码:
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword,
int dwLogonType, int dwLogonProvider, out SafeAccessTokenHandle phToken);
private SafeAccessTokenHandle safeAccessTokenHandle;
public DbSet<ArchiveModelDb> Archives { get; set; }
public DbSet<TagModelDb> Tags { get; set; }
public DbSet<MediaModelDb> Medias { get; set; }
public DbSet<UserModelDb> Users { get; set; }
public DbSet<ConfigurationTable> Config { get; set; }
public DbContextArchiving(DbContextOptions<DbContextArchiving> options) : base(options)
{
try
{
ConfigurationTable configurationTable;
using (var context = Initialize.GetContext())
{
configurationTable = context.Config.FirstOrDefault();
}
bool returnValue = LogonUser(configurationTable.UsernameArchiveUser, "ngroup.be", configurationTable.PasswordArchiveUser, 2, 0, out safeAccessTokenHandle);
if (!returnValue)
{
int ret = Marshal.GetLastWin32Error();
throw new System.ComponentModel.Win32Exception(ret);
}
WindowsIdentity.RunImpersonated(
safeAccessTokenHandle,
() =>
{
Database.Migrate();
}
);
safeAccessTokenHandle.Close();
safeAccessTokenHandle.Dispose();
}
catch (Exception e)
{
Console.WriteLine(e);
}
我将令牌块System.Security.Principal下载到WindowsIdentity和Microsoft.Win32.SafeHandles作为令牌。
当我尝试使用此解决方案时,由于我的代码中有下划线的一部分(如标题中的错误),因此无法启动该应用程序。
我尝试了其他解决方案,并下载了掘金软件包System.Security.Principal.Windows
有了这个软件包,我可以启动我的应用程序,但是我有一个例外 =>
Exception thrown: 'System.IO.FileNotFoundException' in Db.dll
An exception of type 'System.IO.FileNotFoundException' occurred in Db.dll
but was not handled in user code
Impossible de charger le fichier ou l'assembly
'System.Security.Principal.Windows, Version=4.1.1.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a' ou une de ses dépendances. Le fichier
spécifié est introuvable.
感谢您的回答