我正在使用TopShelf来托管我的Windows服务.这是我的设置代码:
static void Main(string[] args)
{
var host = HostFactory.New(x =>
{
x.Service<MyService>(s =>
{
s.ConstructUsing(name => new MyService());
s.WhenStarted(tc => tc.Start());
s.WhenStopped(tc => tc.Stop());
});
x.RunAsLocalSystem();
x.SetDescription(STR_ServiceDescription);
x.SetDisplayName(STR_ServiceDisplayName);
x.SetServiceName(STR_ServiceName);
});
host.Run();
}
Run Code Online (Sandbox Code Playgroud)
我需要确保只有一个应用程序实例可以同时运行.目前,您可以同时将其作为Windows服务和任意数量的控制台应用程序启动.如果应用程序在启动期间检测到其他实
我真的很喜欢基于互斥的方法,但不知道如何使用TopShelf.
我有一个C#应用程序,它在启动时显示登录表单,并在用户通过身份验证后显示主表单.我使用Mutex限制只运行我的应用程序的一个实例.而且,这只适用于登录表单.显示主窗体后,它不会限制用户重新打开登录表单.我正在寻找一种解决方案,一旦主窗体已经打开,登录屏幕就无法显示.
这是我的Program.cs
[STAThread]
static void Main()
{
bool mutexCreated=true;
using (Mutex mutex = new Mutex(true, "eCS", out mutexCreated))
{
if (mutexCreated)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Login());
}
else
{
Process current = Process.GetCurrentProcess();
foreach (Process process in Process.GetProcessesByName(current.ProcessName))
{
if (process.Id != current.Id)
{
XtraMessageBox.Show("Another instance of eCS is already running.", "eCS already running", MessageBoxButtons.OK, MessageBoxIcon.Information);
SetForegroundWindow(process.MainWindowHandle);
break;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我找到了像我这样的类似问题的主题但是找不到我到目前为止找到的答案.我的应用程序包含一个FragmentActivity托管ViewPagerAdapter(FragmentPagerAdapter的子代)并在每个选项卡中包含一个片段的应用程序.我的ViewPagerAdapter在父活动的OnCreateView函数中实例化
_adapter = new ViewPagerAdapter(getApplicationContext()
, getSupportFragmentManager()
, numOfTabs
, status);
Run Code Online (Sandbox Code Playgroud)
ViewPagerAdapter实现了所需的最少方法 getItem,getCount以及getItemPosition
我getItem为每个位置初始化了一个不同的片段:
@Override
public Fragment getItem(int position)
{
Fragment f = new Fragment();
Log.d("Adbox",String.format("Inside ViewPagerAdapter.getItem(%s)",position));
switch(position)
{
case 0:
Log.d("Adbox","All offers ==");
f=FragmentAllOffers.newInstance(_context);
f.setRetainInstance(true);
break;
case 1:
Log.d("Adbox","Nearby offers ==");
f=FragmentNearbyOffers.newInstance(_context);
//f.setRetainInstance(true);
break;
case 2:
Log.d("Adbox","My coupons ==");
f=FragmentCoupons.newInstance(_context);
f.setRetainInstance(true);
break;
case 3:
Log.d("Adbox","Account ==");
f=FragmentAccount.newInstance(_context);
f.setRetainInstance(true);
//f=LayoutLocal.newInstance(_context);
break;
case 4:
Log.d("Adbox","Preferences ==");
f=FragmentPreferences.newInstance(_context);
f.setRetainInstance(true);
break;
default:
break; …Run Code Online (Sandbox Code Playgroud) 我有一个程序,当使用资源管理器中的右键菜单打开文件时.但是,如果我选择多个文件,然后右键单击并打开我的程序,那么它会打开我的程序的多个实例,而不是仅将多个文件作为参数传递给单个实例.该程序是用vb.net编写的,但不是windows窗体,它只是一个模块,所以我可以勾选Visual Studio中属性中的Single实例选项.
那么如何在单个实例中从资源管理器上下文菜单中打开多个文件.
我有一个集成了Facebook和LinkdedIn网络的应用程序.根据说明,为了集成LinkedIn,我需要在我的活动中的清单中添加以下代码:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="x-oauthflow-linkedin" android:host="callback" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)
这里也可以找到一个例子.正如您在链接中看到的,我们还需要添加" android:launchMode ="singleInstance" "行,否则在使用LinkedIn登录后,将启动该活动的新实例.
但是,当尝试从同一活动登录Facebook时,此实际行会导致Facebook登录活动(!)出现以下错误:
E/AndroidRuntime(7100):引起:com.facebook.FacebookException:无法使用null调用包调用LoginActivity.如果调用者的launchMode是singleInstance,则会发生这种情况.
所以现在,我有点卡住,因为删除android:launchMode ="singleInstance"将使Facebook登录工作,但会导致LinkedIn登录启动我的活动的另一个实例,但如果我添加它,那么Facebook登录不起作用!
有谁知道如何解决这个问题?
谢谢,
季米特里斯
我有一个jar文件,显示它JFrame何时执行.我不想允许重复执行我的Jar文件.每次创建框架之前,使用Java我想检查Jar是否已经在执行.如果我的应用程序 我已经在屏幕上有一个实例,我想把它带到前面.
我怎样才能做到这一点?请建议我一个方法.
我正在编写一个 C# WinForms 应用程序,我需要确保在任何给定时间都有一个实例在运行。我以为我可以使用互斥锁来工作。
这是我找到的一个链接: 如何将应用程序限制为仅一个实例。
当我使用单个桌面时,这很好用。但是,当在 Windows 10 中打开多个虚拟桌面时,这些桌面中的每一个都可以托管应用程序的另一个实例。
有没有办法在所有桌面上限制单个实例?
我有一个用 NSIS 编写的更新程序。我只是想确保当它被调用两次或更多次时,它不会创建更新程序的另一个实例,否则会有两个或更多更新程序在运行。
如果您的更新程序已经在运行,您如何限制更新程序创建另一个实例?因此,无论进行了多少次调用,都只会运行一个更新程序。
谢谢...
我一直是控制台 vim 用户,但最近我尝试使用 gvim。我已经进行了一些设置,这样我的控制台习惯就不会受到影响,例如使用 .
然而,用我的上网本打开多个 gvim 和终端是可怕的,很快我的 vim 空间就减少到一两厘米。充其量,窗口宽度减半,从而无法垂直分割屏幕(平铺 wm)。
我通过将 vim 别名化来解决这个问题,gvim --remote-silent并且它工作了几天,但今天我需要使用 -c '' 并意识到在 --remote-silent 后面有任何开关都会将这些开关作为文件打开。这样gvim --remote-silent --foo bar会打开两个文件:--foo 和 bar。
我为 放置了一个新别名alias vim=gvim,但我担心这会让我再次成为控制台 vim 用户,比我想象的要早。
所以问题是,以最小的努力(设置系统可能很费力)继续使用 gvim 的首选方法是什么,这样我仍然可以继续使用 vim 的全部功能。该解决方案不需要使用远程 vim,它应该只是最小化 gvim 窗口。
我正在寻找一种有效的方法来查找给定的应用程序(比如app.exe)是否是单个实例?我想到了以下这些解决方案:
但我不相信上述两种解决方案.在Windows中还有其他有效的方法吗?
请注意,我不会杀死或对该应用程序的已运行(如果有)实例进行任何修改.